From 8a659918a7ad6e9eab4536193c59256dc786c13d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deniz=20D=C3=BCzg=C3=B6ren?= Date: Sun, 18 Aug 2019 17:53:22 +0200 Subject: [PATCH] Fixed a bug that would cause the drawable integers in the database to desync from the ones stored in R.drawable, cleaned up a bunch of code --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 1 - .../denizd/substitutionplan/CardAdapter.kt | 114 ++++++++++-------- .../denizd/substitutionplan/DataFetcher.kt | 13 +- .../java/com/denizd/substitutionplan/Main.kt | 4 +- .../com/denizd/substitutionplan/MiscData.kt | 30 ++--- .../substitutionplan/SettingsFragment.kt | 18 ++- .../java/com/denizd/substitutionplan/Subst.kt | 2 +- .../denizd/substitutionplan/SubstDatabase.kt | 2 +- build.gradle | 2 +- 10 files changed, 103 insertions(+), 87 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fdb3afe..b95dbe9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.denizd.substitutionplan" minSdkVersion 21 targetSdkVersion 28 - versionCode 26 - versionName "2.2.3" + versionCode 27 + versionName "2.2.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1b3c1b5..1285c7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,7 +5,6 @@ - ) : RecyclerView.Adapter() { @@ -63,7 +64,7 @@ class CardAdapter(private var mSubst: List) : RecyclerView.Adapter) : RecyclerView.Adapter prefs.getString("cardGerman", "") ?: "" - "mat", "map" -> prefs.getString("cardMaths", "") ?: "" - "eng", "enp", "ena" -> prefs.getString("cardEnglish", "") ?: "" - "spo", "spp", "spth" -> prefs.getString("cardPhysEd", "") ?: "" - "pol", "pop" -> prefs.getString("cardPolitics", "") ?: "" - "dar", "dap" -> prefs.getString("cardTheatre", "") ?: "" - "phy", "php" -> prefs.getString("cardPhysics", "") ?: "" - "bio", "bip", "nw1", "nw2", "nw3", "nw4" -> prefs.getString("cardBiology", "") ?: "" - "che", "chp" -> prefs.getString("cardChemistry", "") ?: "" - "phi", "psp" -> prefs.getString("cardPhilosophy", "") ?: "" - "laa", "laf", "lat" -> prefs.getString("cardLatin", "") ?: "" - "spa", "spf" -> prefs.getString("cardSpanish", "") ?: "" - "fra", "frf", "frz" -> prefs.getString("cardFrench", "") ?: "" - "inf" -> prefs.getString("cardCompsci", "") ?: "" - "ges" -> prefs.getString("cardHistory", "") ?: "" - "rel" -> prefs.getString("cardReligion", "") ?: "" - "geg" -> prefs.getString("cardGeography", "") ?: "" - "kun" -> prefs.getString("cardArts", "") ?: "" - "mus" -> prefs.getString("cardMusic", "") ?: "" - "tue" -> prefs.getString("cardTurkish", "") ?: "" - "chi" -> prefs.getString("cardChinese", "") ?: "" - "gll" -> prefs.getString("cardGLL", "") ?: "" - "wat" -> prefs.getString("cardWAT", "") ?: "" - "för" -> prefs.getString("cardForder", "") ?: "" - "met", "wpb" -> prefs.getString("cardWP", "") ?: "" - else -> "" - } - } catch (e: StringIndexOutOfBoundsException) { - try { - colorCheck = holder.mCourse.text.toString().toLowerCase().substring(0, 2) - colourString = when (colorCheck) { - "nw" -> prefs.getString("cardBiology", "") ?: "" - "wp" -> prefs.getString("cardWP", "") ?: "" - else -> "" - } - } catch (e2: StringIndexOutOfBoundsException) { - colourString = "" - } + colourString = getColourString(holder.mCourse.text.toString()) + val colourPrefsInt = if (colourString.isNotEmpty()) { + prefs.getString("card$colourString", "") ?: "" + } else { + "" } - colour = MiscData.getColourForString(colourString) + colour = MiscData.getColourForString(colourPrefsInt) if (colour != 0) { holder.mCard.setCardBackgroundColor(ContextCompat.getColor(holder.mCourse.context, colour)) } else { @@ -133,7 +98,7 @@ class CardAdapter(private var mSubst: List) : RecyclerView.Adapter) : RecyclerView.Adapter R.color.colorTextLight else -> R.color.colorText } - } - holder.mImageView.setColorFilter(ContextCompat.getColor(holder.mImageView.context, textColor)) - holder.mGroup.setTextColor(ContextCompat.getColor(holder.mImageView.context, textColor)) - holder.mDate.setTextColor(ContextCompat.getColor(holder.mImageView.context, textColor)) - holder.mTime.setTextColor(ContextCompat.getColor(holder.mImageView.context, textColor)) - holder.mCourse.setTextColor(ContextCompat.getColor(holder.mImageView.context, textColor)) - holder.mRoom.setTextColor(ContextCompat.getColor(holder.mImageView.context, textColor)) - holder.mAdditional.setTextColor(ContextCompat.getColor(holder.mImageView.context, textColor)) + }) + 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 @@ -158,4 +123,49 @@ class CardAdapter(private var mSubst: List) : RecyclerView.Adapter "German" + "mat", "map" -> "Maths" + "eng", "enp", "ena" -> "English" + "spo", "spp", "spth" -> "PhysEd" + "pol", "pop" -> "ics" + "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) { + "" + } + } + } + } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/substitutionplan/DataFetcher.kt b/app/src/main/java/com/denizd/substitutionplan/DataFetcher.kt index ee2f110..438c39d 100644 --- a/app/src/main/java/com/denizd/substitutionplan/DataFetcher.kt +++ b/app/src/main/java/com/denizd/substitutionplan/DataFetcher.kt @@ -15,7 +15,6 @@ import androidx.core.content.ContextCompat import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.google.android.material.snackbar.Snackbar import org.jsoup.Jsoup -import java.lang.IndexOutOfBoundsException import kotlin.collections.ArrayList class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, context: Context, application: Application, parentview: View?) : AsyncTask() { @@ -53,7 +52,7 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte if (menu) { val docFood = Jsoup.connect(foodUrl).get() currentFoodTime = docFood.select("h1")[0].text() - if (currentFoodTime != prefs.getString("timeFood", "")) { + if (currentFoodTime != prefs.getString("timeFoodNew", "")) { val foodRepository = FoodRepository(mApplication) val foodElements = docFood.select("th") foodRepository.deleteAll() @@ -76,14 +75,14 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte } foodRepository.insert(Food(s, priority)) } - edit.putString("timeFood", currentFoodTime).apply() + edit.putString("timeFoodNew", currentFoodTime).apply() } } if (plan) { val doc = Jsoup.connect(substUrl).get() currentTime = doc.select("h1")[0].text() - if (currentTime != prefs.getString("time", "")) { + if (currentTime != prefs.getString("timeNew", "")) { val substRepo = SubstRepository(mApplication) val rows = doc.select("tr") val paragraphs = doc.select("p") @@ -117,9 +116,7 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte courseS.add(cols[3].text()) roomS.add(cols[4].text()) additionalS.add(cols[5].text()) - - val drawable = MiscData.getIcon(courseS[i]) - val subst = Subst(drawable, groupS[i], dateS[i], timeS[i], courseS[i], + val subst = Subst(groupS[i], dateS[i], timeS[i], courseS[i], roomS[i], additionalS[i], priority) priority-- // substViewModel.insertSubst(subst) @@ -191,7 +188,7 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte manager.notify(1, notification) } } - edit.putString("time", currentTime).apply() + edit.putString("timeNew", currentTime).apply() } } diff --git a/app/src/main/java/com/denizd/substitutionplan/Main.kt b/app/src/main/java/com/denizd/substitutionplan/Main.kt index 4ffce55..0a71013 100644 --- a/app/src/main/java/com/denizd/substitutionplan/Main.kt +++ b/app/src/main/java/com/denizd/substitutionplan/Main.kt @@ -107,7 +107,7 @@ class Main : AppCompatActivity(R.layout.app_bar_main) { if (!prefs.getBoolean("autoRefresh", false) && prefs.getInt("firstTimeOpening", 0) != 0) { try { val sb = StringBuilder() - val updated = sb.append(getText(R.string.lastUpdated)).append(prefs.getString("time", "")).toString() + val updated = sb.append(getText(R.string.lastUpdated)).append(prefs.getString("timeNew", "")).toString() Snackbar.make(contextView, updated, Snackbar.LENGTH_LONG).show() } catch (e: IllegalArgumentException) {} @@ -238,7 +238,7 @@ class Main : AppCompatActivity(R.layout.app_bar_main) { val dialogView = LayoutInflater.from(context).inflate(R.layout.simple_dialog, null) dialogView.findViewById(R.id.textviewtitle).text = getString(R.string.information) val sb = StringBuilder() - val dialogText = sb.append(getText(R.string.lastUpdated)).append((prefs.getString("time", "") ?: "") + ".\n\n").append(prefs.getString("informational", "")) + val dialogText = sb.append(getText(R.string.lastUpdated)).append((prefs.getString("timeNew", "") ?: "") + ".\n\n").append(prefs.getString("informational", "")) dialogView.findViewById(R.id.dialogtext).text = dialogText dialog.setView(dialogView).show() } diff --git a/app/src/main/java/com/denizd/substitutionplan/MiscData.kt b/app/src/main/java/com/denizd/substitutionplan/MiscData.kt index 9f9d7b9..785e9ec 100644 --- a/app/src/main/java/com/denizd/substitutionplan/MiscData.kt +++ b/app/src/main/java/com/denizd/substitutionplan/MiscData.kt @@ -1,9 +1,21 @@ package com.denizd.substitutionplan import android.content.SharedPreferences +import java.util.* object MiscData { + val languageIndependentCourses = arrayOf("German", "English", "French", "Spanish", "Latin", "Turkish", "Chinese", "Arts", "Music", + "Theatre", "Geography", "History", "Politics", "Philosophy", "Religion", "Maths", "Biology", "Chemistry", + "Physics", "CompSci", "PhysEd", "GLL", "WAT", "Forder", "WP") + val colourNames = arrayOf("default", "red", "orange", "yellow", "green", "teal", "cyan", "blue", "purple", "pink", + "brown", "grey", "pureWhite", "salmon", "tangerine", "banana", "flora", "spindrift", "sky", "orchid", + "lavender", "carnation", "brown2", "pureBlack") + private val colourIntegers = intArrayOf(0, R.color.bgRed, R.color.bgOrange, R.color.bgYellow, R.color.bgGreen, + R.color.bgTeal, R.color.bgCyan, R.color.bgBlue, R.color.bgPurple, R.color.bgPink, R.color.bgBrown, R.color.bgGrey, + R.color.bgPureWhite, R.color.bgSalmon, R.color.bgTangerine, R.color.bgBanana, R.color.bgFlora, R.color.bgSpindrift, + R.color.bgSky, R.color.bgOrchid, R.color.bgLavender, R.color.bgCarnation, R.color.bgBrown2, R.color.bgPureBlack) + fun emoji(unicode: Int): String { return String(Character.toChars(unicode)) } fun getColourForString(name: String): Int { @@ -35,8 +47,8 @@ object MiscData { } } - fun getIcon(course: String): Int { - return with (course.toLowerCase()) { + fun getIconForCourse(course: String): Int { + return with (course.toLowerCase(Locale.ROOT)) { when { contains("deu") || contains("dep") || contains("daz") -> R.drawable.ic_german contains("mat") || contains("map") -> R.drawable.ic_maths @@ -69,22 +81,12 @@ object MiscData { } fun transferOldColourIntsToString(prefs: SharedPreferences) { - val colourIntegers = intArrayOf(0, R.color.bgRed, R.color.bgOrange, R.color.bgYellow, R.color.bgGreen, - R.color.bgTeal, R.color.bgCyan, R.color.bgBlue, R.color.bgPurple, R.color.bgPink, R.color.bgBrown, R.color.bgGrey, - R.color.bgPureWhite, R.color.bgSalmon, R.color.bgTangerine, R.color.bgBanana, R.color.bgFlora, R.color.bgSpindrift, - R.color.bgSky, R.color.bgOrchid, R.color.bgLavender, R.color.bgCarnation, R.color.bgBrown2, R.color.bgPureBlack) - val colourStrings = arrayOf("default", "red", "orange", "yellow", "green", "teal", "cyan", "blue", "purple", "pink", - "brown", "grey", "pureWhite", "salmon", "tangerine", "banana", "flora", "spindrift", "sky", "orchid", - "lavender", "carnation", "brown2", "pureBlack") - val courses = arrayOf("German", "English", "French", "Spanish", "Latin", "Turkish", "Chinese", "Arts", "Music", - "Theatre", "Geography", "History", "Politics", "Philosophy", "Religion", "Maths", "Biology", "Chemistry", - "Physics", "CompSci", "PhysEd", "GLL", "WAT", "Forder", "WP") var colour = "" val edit = prefs.edit() - for (course in courses) { + for (course in languageIndependentCourses) { for (i in 0 until colourIntegers.size) { if (prefs.getInt("bg$course", 0) == colourIntegers[i]) { - colour = colourStrings[i] + colour = colourNames[i] break } colour = "" diff --git a/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt b/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt index f946395..59ef748 100644 --- a/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt +++ b/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt @@ -291,7 +291,7 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen private fun getColourList(): ArrayList { val colours = ArrayList() - val coursesNoLang = arrayOf("German", "English", "French", "Spanish", "Latin", "Turkish", "Chinese", "Arts", "Music", "Theatre", "Geography", "History", "Politics", "Philosophy", "Religion", "Maths", "Biology", "Chemistry", "Physics", "CompSci", "PhysEd", "GLL", "WAT", "Forder", "WP") + val coursesNoLang = MiscData.languageIndependentCourses val courses = arrayOf(getString(R.string.courseDeu), getString(R.string.courseEng), getString(R.string.courseFra), getString(R.string.courseSpa), getString(R.string.courseLat), getString(R.string.courseTue), getString(R.string.courseChi), getString(R.string.courseKun), getString(R.string.courseMus), getString(R.string.courseDar), getString(R.string.courseGeg), getString(R.string.courseGes), getString(R.string.coursePol), getString(R.string.coursePhi), getString(R.string.courseRel), getString(R.string.courseMat), getString(R.string.courseBio), getString(R.string.courseChe), getString(R.string.coursePhy), getString(R.string.courseInf), getString(R.string.courseSpo), getString(R.string.courseGll), getString(R.string.courseWat), getString(R.string.courseFor), getString(R.string.courseWp)) val coursesIcons = intArrayOf(R.drawable.ic_german, R.drawable.ic_english, R.drawable.ic_french, R.drawable.ic_spanish, R.drawable.ic_latin, R.drawable.ic_turkish, R.drawable.ic_chinese, R.drawable.ic_arts, R.drawable.ic_music, R.drawable.ic_drama, R.drawable.ic_geography, R.drawable.ic_history, R.drawable.ic_politics, R.drawable.ic_philosophy, R.drawable.ic_religion, R.drawable.ic_maths, R.drawable.ic_biology, R.drawable.ic_chemistry, R.drawable.ic_physics, R.drawable.ic_compsci, R.drawable.ic_pe, R.drawable.ic_gll, R.drawable.ic_wat, R.drawable.ic_help, R.drawable.ic_pencil) @@ -322,10 +322,7 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen picker.findViewById(R.id.spindrift), picker.findViewById(R.id.sky), picker.findViewById(R.id.orchid), picker.findViewById(R.id.lavender), picker.findViewById(R.id.carnation), picker.findViewById(R.id.brown2), picker.findViewById(R.id.pureBlack)) - - val colours = arrayOf("default", "red", "orange", "yellow", "green", "teal", "cyan", "blue", "purple", "pink", - "brown", "grey", "pureWhite", "salmon", "tangerine", "banana", "flora", "spindrift", "sky", "orchid", - "lavender", "carnation", "brown2", "pureBlack") + val colours = MiscData.colourNames for (i2 in 0 until buttons.size) { buttons[i2].setOnClickListener { @@ -401,6 +398,17 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen edit.putBoolean("testUrls", currentTest).apply() Toast.makeText(mContext, "Test URLs set to $currentTest", Toast.LENGTH_LONG).show() } + "_DEVCHANNEL" -> { + val subbed = if (prefs.getBoolean("subscribedToFBDebugChannel", false)) { + FirebaseMessaging.getInstance().unsubscribeFromTopic("substitutions-debug") + "Unsubscribed from" + } else { + FirebaseMessaging.getInstance().subscribeToTopic("substitutions-debug") + "Subscribed to" + } + edit.putBoolean("subscribedToFBDebugChannel", !prefs.getBoolean("subscribedToFBDebugChannel", false)).apply() + Toast.makeText(mContext, "$subbed Firebase development channel", Toast.LENGTH_LONG).show() + } else -> Toast.makeText(mContext, getString(R.string.invalidCode), Toast.LENGTH_LONG).show() } } diff --git a/app/src/main/java/com/denizd/substitutionplan/Subst.kt b/app/src/main/java/com/denizd/substitutionplan/Subst.kt index 780a887..5841603 100644 --- a/app/src/main/java/com/denizd/substitutionplan/Subst.kt +++ b/app/src/main/java/com/denizd/substitutionplan/Subst.kt @@ -4,7 +4,7 @@ import androidx.room.Entity import androidx.room.PrimaryKey @Entity(tableName = "subst_table") -public class Subst(val icon: Int, val group: String, val date: String, val time: String, val course: String, val room: String, val additional: String, val priority: Int) { +public class Subst(val group: String, val date: String, val time: String, val course: String, val room: String, val additional: String, val priority: Int) { @PrimaryKey(autoGenerate = true) var id: Int = 0 diff --git a/app/src/main/java/com/denizd/substitutionplan/SubstDatabase.kt b/app/src/main/java/com/denizd/substitutionplan/SubstDatabase.kt index e8a19c4..246ac2a 100644 --- a/app/src/main/java/com/denizd/substitutionplan/SubstDatabase.kt +++ b/app/src/main/java/com/denizd/substitutionplan/SubstDatabase.kt @@ -5,7 +5,7 @@ import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase -@Database(entities = [Subst::class, Food::class], version = 4, exportSchema = false) +@Database(entities = [Subst::class, Food::class], version = 5, exportSchema = false) public abstract class SubstDatabase : RoomDatabase() { abstract fun substDao(): SubstDao diff --git a/build.gradle b/build.gradle index 6110f96..21dd935 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0-beta02' + classpath 'com.android.tools.build:gradle:3.5.0-rc03' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.0' classpath 'io.fabric.tools:gradle:1.31.0'