diff --git a/app/src/main/java/com/denizd/substitutionplan/ColourAdapter.kt b/app/src/main/java/com/denizd/substitutionplan/ColourAdapter.kt index d217719..e735ba5 100644 --- a/app/src/main/java/com/denizd/substitutionplan/ColourAdapter.kt +++ b/app/src/main/java/com/denizd/substitutionplan/ColourAdapter.kt @@ -5,12 +5,9 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView -import androidx.appcompat.app.AlertDialog import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView -import com.google.android.material.button.MaterialButton import com.google.android.material.card.MaterialCardView class ColourAdapter(private var mColours: List, onClickListener: OnClickListener) : RecyclerView.Adapter() { @@ -21,6 +18,7 @@ class ColourAdapter(private var mColours: List, onClickListener: OnClick 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) } @@ -40,9 +38,12 @@ class ColourAdapter(private var mColours: List, onClickListener: OnClick holder.title.text = currentItem.title holder.titleNoLang.text = currentItem.titleNoLang holder.image.setImageDrawable(ContextCompat.getDrawable(holder.image.context, currentItem.icon)) - if (currentItem.colour != 0) { - holder.image.drawable.setTint(ContextCompat.getColor(holder.image.context, currentItem.colour)) + val colour = if (currentItem.colour != 0) { + currentItem.colour + } else { + R.color.lightbackground } + holder.cardView.setCardBackgroundColor(ContextCompat.getColor(holder.image.context, colour)) } override fun getItemCount(): Int = mColours.size diff --git a/app/src/main/java/com/denizd/substitutionplan/DataFetcher.kt b/app/src/main/java/com/denizd/substitutionplan/DataFetcher.kt index 1d9d23c..27f45b4 100644 --- a/app/src/main/java/com/denizd/substitutionplan/DataFetcher.kt +++ b/app/src/main/java/com/denizd/substitutionplan/DataFetcher.kt @@ -3,7 +3,6 @@ package com.denizd.substitutionplan import android.app.* import android.content.Context import android.content.Intent -import android.content.SharedPreferences import android.graphics.Color import android.media.RingtoneManager import android.os.AsyncTask @@ -20,11 +19,9 @@ import androidx.core.app.NotificationCompat import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.google.android.material.snackbar.Snackbar import org.jsoup.Jsoup -import org.jsoup.nodes.Document import org.jsoup.select.Elements import java.lang.IndexOutOfBoundsException import java.net.URL -import java.net.URLConnection import java.text.SimpleDateFormat import java.util.* import kotlin.collections.ArrayList @@ -48,18 +45,10 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte private var priority = 200 private var notifText = "" private var informational = "" - private lateinit var connection: URLConnection - private lateinit var rows: Elements - private lateinit var paragraphs: Elements - private lateinit var foodElements: Elements - private lateinit var doc: Document - private lateinit var docFood: Document - private val prefs = PreferenceManager.getDefaultSharedPreferences(mContext) as SharedPreferences - private val edit = prefs.edit() as SharedPreferences.Editor + private val prefs = PreferenceManager.getDefaultSharedPreferences(mContext) + private val edit = prefs.edit() private lateinit var pullToRefresh: SwipeRefreshLayout private lateinit var progressBar: ProgressBar - private val substViewModel = SubstViewModel(mApplication) - private val foodViewModel = FoodViewModel(mApplication) private val oldDateFormat = "EEE, dd MMM yyyy HH:mm:ss zzz" private val newDateFormat = "yyyy-MM-dd, HH:mm:ss" private var sdf = SimpleDateFormat(oldDateFormat) @@ -75,8 +64,9 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte progressBar.progress = 0 } if (menu) { - docFood = Jsoup.connect("https://djd4rkn355.github.io/food.html").get() - foodElements = docFood.select("th") + val foodViewModel = FoodViewModel(mApplication) + val docFood = Jsoup.connect("https://djd4rkn355.github.io/food.html").get() + val foodElements = docFood.select("th") mView?.let { progressBar.max = foodElements.size @@ -150,12 +140,13 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte } if (plan) { - doc = Jsoup.connect("https://djd4rkn355.github.io/subst").get() - connection = URL("https://djd4rkn355.github.io/subst").openConnection() + val substViewModel = SubstViewModel(mApplication) + val doc = Jsoup.connect("https://djd4rkn355.github.io/subst_test").get() + val connection = URL("https://djd4rkn355.github.io/subst").openConnection() edit.putString("time", connection.getHeaderField("Last-Modified")).apply() d = sdf.parse(connection.getHeaderField("Last-Modified")) - rows = doc.select("tr") - paragraphs = doc.select("p") + val rows = doc.select("tr") + val paragraphs = doc.select("p") val groupS = ArrayList() val dateS = ArrayList() @@ -179,8 +170,6 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte substViewModel.deleteAllSubst() - val md = MiscData() - for (i in 0 until rows.size) { val row = rows[i] val cols = row.select("th") as Elements @@ -197,7 +186,7 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte } } - val drawable = md.getIcon(courseS[i]) + val drawable = MiscData.getIcon(courseS[i]) val subst = Subst(drawable, groupS[i], dateS[i], timeS[i], courseS[i], roomS[i], additionalS[i], priority) priority-- @@ -231,7 +220,7 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte val openApp = Intent(mContext, Main::class.java) openApp.flags = Intent.FLAG_ACTIVITY_NEW_TASK openApp.flags += Intent.FLAG_ACTIVITY_CLEAR_TASK - val openAppPending = PendingIntent.getActivity(mContext, 0, openApp, 0) // PendingIntent.FLAG_ONE_SHOT + val openAppPending = PendingIntent.getActivity(mContext, 0, openApp, 0) val notificationLayout = RemoteViews(mContext.packageName, R.layout.notification) notificationLayout.setTextViewText(R.id.notification_title, mContext.getString(R.string.subst)) @@ -241,10 +230,9 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte val manager = mContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val channelId = "general" val channelName = mContext.getString(R.string.general) - lateinit var channel: NotificationChannel if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - channel = NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT) + val channel = NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT) channel.enableLights(true) channel.lightColor = Color.BLUE manager.createNotificationChannel(channel) diff --git a/app/src/main/java/com/denizd/substitutionplan/MiscData.kt b/app/src/main/java/com/denizd/substitutionplan/MiscData.kt index f6ea1dc..26fbf9a 100644 --- a/app/src/main/java/com/denizd/substitutionplan/MiscData.kt +++ b/app/src/main/java/com/denizd/substitutionplan/MiscData.kt @@ -1,6 +1,6 @@ package com.denizd.substitutionplan -class MiscData { +object MiscData { fun emoji(unicode: Int): String { return String(Character.toChars(unicode)) } diff --git a/app/src/main/java/com/denizd/substitutionplan/NotificationService.kt b/app/src/main/java/com/denizd/substitutionplan/NotificationService.kt index 7660a90..7a1cde4 100644 --- a/app/src/main/java/com/denizd/substitutionplan/NotificationService.kt +++ b/app/src/main/java/com/denizd/substitutionplan/NotificationService.kt @@ -4,12 +4,7 @@ import android.app.job.JobParameters import android.app.job.JobService import android.content.Context import android.net.ConnectivityManager -import android.net.NetworkInfo import android.preference.PreferenceManager -import com.google.android.material.snackbar.Snackbar -import java.io.IOException -import java.lang.NullPointerException -import java.net.MalformedURLException import java.net.URL class NotificationService : JobService() { @@ -31,13 +26,10 @@ class NotificationService : JobService() { val prefs = PreferenceManager.getDefaultSharedPreferences(context) val edit = prefs.edit() val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager - val statusMobile = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).state - val statusWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).state + val networkStatus = connectivityManager.activeNetworkInfo Thread(Runnable { - if (jobCancelled) { - return@Runnable - } else if (statusMobile != NetworkInfo.State.CONNECTED && statusWifi != NetworkInfo.State.CONNECTED) { + if (jobCancelled || networkStatus == null) { return@Runnable } if (prefs.getBoolean("notif", false)) { @@ -45,7 +37,7 @@ class NotificationService : JobService() { try { val url = URL("https://djd4rkn355.github.io/subst.html") val connection = url.openConnection() - if (!connection.getHeaderField("Last-Modified").equals(prefs.getString("time", ""))) { + if (connection.getHeaderField("Last-Modified") != prefs.getString("time", "")) { DataFetcher(true, true, true, context, application, null).execute() edit.putString("time", connection.getHeaderField("Last-Modified")).apply() } diff --git a/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt b/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt index 08dd137..e3b23db 100644 --- a/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt +++ b/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt @@ -325,7 +325,9 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen for (i2 in 0 until buttons.size) { buttons[i2].setOnClickListener { prefs.edit().putInt("bg$titleNoLang", colours[i2]).apply() + val recyclerViewState = colourRecycler.layoutManager?.onSaveInstanceState() colourRecycler.adapter = ColourAdapter(getColourList(), this) + colourRecycler.layoutManager?.onRestoreInstanceState(recyclerViewState) colourPickerDialog.dismiss() } } diff --git a/app/src/main/res/layout/bottom_sheet.xml b/app/src/main/res/layout/bottom_sheet.xml index 3958e93..eb0eb36 100644 --- a/app/src/main/res/layout/bottom_sheet.xml +++ b/app/src/main/res/layout/bottom_sheet.xml @@ -19,7 +19,9 @@ android:layout_marginEnd="8dp" app:layout_anchor="@+id/bottom_sheet" android:layout_gravity="top" - android:background="@color/lighthintcolor"/> + android:background="@color/lighthintcolor" + android:clickable="false" + android:focusable="false"/> - + android:layout_marginStart="8dp" + android:layout_marginEnd="8dp" + android:layout_marginTop="3dp" + android:layout_marginBottom="3dp" + app:cardElevation="1dp"> - + - + - + - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 8de9134..a4c692f 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -12,7 +12,7 @@ #635C1F #355823 #19504B - #2F555D + #125a6d #1F3B5E #42295D #5A2345