Fixed some visual and UX bugs in the colour picker

This commit is contained in:
Deniz Düzgören
2019-07-26 21:43:52 +02:00
parent 351845c4df
commit 14477c8f55
8 changed files with 78 additions and 66 deletions
@@ -5,12 +5,9 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.button.MaterialButton
import com.google.android.material.card.MaterialCardView import com.google.android.material.card.MaterialCardView
class ColourAdapter(private var mColours: List<Colour>, onClickListener: OnClickListener) : RecyclerView.Adapter<ColourAdapter.ColourViewHolder>() { class ColourAdapter(private var mColours: List<Colour>, onClickListener: OnClickListener) : RecyclerView.Adapter<ColourAdapter.ColourViewHolder>() {
@@ -21,6 +18,7 @@ class ColourAdapter(private var mColours: List<Colour>, onClickListener: OnClick
val title: TextView = view.findViewById(R.id.item_text) val title: TextView = view.findViewById(R.id.item_text)
var image: ImageView = view.findViewById(R.id.item_image) var image: ImageView = view.findViewById(R.id.item_image)
val titleNoLang: TextView = view.findViewById(R.id.item_text_no_lang) val titleNoLang: TextView = view.findViewById(R.id.item_text_no_lang)
val cardView: MaterialCardView = view.findViewById(R.id.cardView)
val mClickListener = clickListener val mClickListener = clickListener
init { view.setOnClickListener(this) } init { view.setOnClickListener(this) }
@@ -40,9 +38,12 @@ class ColourAdapter(private var mColours: List<Colour>, onClickListener: OnClick
holder.title.text = currentItem.title holder.title.text = currentItem.title
holder.titleNoLang.text = currentItem.titleNoLang holder.titleNoLang.text = currentItem.titleNoLang
holder.image.setImageDrawable(ContextCompat.getDrawable(holder.image.context, currentItem.icon)) holder.image.setImageDrawable(ContextCompat.getDrawable(holder.image.context, currentItem.icon))
if (currentItem.colour != 0) { val colour = if (currentItem.colour != 0) {
holder.image.drawable.setTint(ContextCompat.getColor(holder.image.context, currentItem.colour)) currentItem.colour
} else {
R.color.lightbackground
} }
holder.cardView.setCardBackgroundColor(ContextCompat.getColor(holder.image.context, colour))
} }
override fun getItemCount(): Int = mColours.size override fun getItemCount(): Int = mColours.size
@@ -3,7 +3,6 @@ package com.denizd.substitutionplan
import android.app.* import android.app.*
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences
import android.graphics.Color import android.graphics.Color
import android.media.RingtoneManager import android.media.RingtoneManager
import android.os.AsyncTask import android.os.AsyncTask
@@ -20,11 +19,9 @@ import androidx.core.app.NotificationCompat
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import org.jsoup.Jsoup import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.jsoup.select.Elements import org.jsoup.select.Elements
import java.lang.IndexOutOfBoundsException import java.lang.IndexOutOfBoundsException
import java.net.URL import java.net.URL
import java.net.URLConnection
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
@@ -48,18 +45,10 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte
private var priority = 200 private var priority = 200
private var notifText = "" private var notifText = ""
private var informational = "" private var informational = ""
private lateinit var connection: URLConnection private val prefs = PreferenceManager.getDefaultSharedPreferences(mContext)
private lateinit var rows: Elements private val edit = prefs.edit()
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 lateinit var pullToRefresh: SwipeRefreshLayout private lateinit var pullToRefresh: SwipeRefreshLayout
private lateinit var progressBar: ProgressBar 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 oldDateFormat = "EEE, dd MMM yyyy HH:mm:ss zzz"
private val newDateFormat = "yyyy-MM-dd, HH:mm:ss" private val newDateFormat = "yyyy-MM-dd, HH:mm:ss"
private var sdf = SimpleDateFormat(oldDateFormat) private var sdf = SimpleDateFormat(oldDateFormat)
@@ -75,8 +64,9 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte
progressBar.progress = 0 progressBar.progress = 0
} }
if (menu) { if (menu) {
docFood = Jsoup.connect("https://djd4rkn355.github.io/food.html").get() val foodViewModel = FoodViewModel(mApplication)
foodElements = docFood.select("th") val docFood = Jsoup.connect("https://djd4rkn355.github.io/food.html").get()
val foodElements = docFood.select("th")
mView?.let { mView?.let {
progressBar.max = foodElements.size progressBar.max = foodElements.size
@@ -150,12 +140,13 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte
} }
if (plan) { if (plan) {
doc = Jsoup.connect("https://djd4rkn355.github.io/subst").get() val substViewModel = SubstViewModel(mApplication)
connection = URL("https://djd4rkn355.github.io/subst").openConnection() 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() edit.putString("time", connection.getHeaderField("Last-Modified")).apply()
d = sdf.parse(connection.getHeaderField("Last-Modified")) d = sdf.parse(connection.getHeaderField("Last-Modified"))
rows = doc.select("tr") val rows = doc.select("tr")
paragraphs = doc.select("p") val paragraphs = doc.select("p")
val groupS = ArrayList<String>() val groupS = ArrayList<String>()
val dateS = ArrayList<String>() val dateS = ArrayList<String>()
@@ -179,8 +170,6 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte
substViewModel.deleteAllSubst() substViewModel.deleteAllSubst()
val md = MiscData()
for (i in 0 until rows.size) { for (i in 0 until rows.size) {
val row = rows[i] val row = rows[i]
val cols = row.select("th") as Elements 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], val subst = Subst(drawable, groupS[i], dateS[i], timeS[i], courseS[i],
roomS[i], additionalS[i], priority) roomS[i], additionalS[i], priority)
priority-- priority--
@@ -231,7 +220,7 @@ class DataFetcher(isplan: Boolean, ismenu: Boolean, isjobservice: Boolean, conte
val openApp = Intent(mContext, Main::class.java) val openApp = Intent(mContext, Main::class.java)
openApp.flags = Intent.FLAG_ACTIVITY_NEW_TASK openApp.flags = Intent.FLAG_ACTIVITY_NEW_TASK
openApp.flags += Intent.FLAG_ACTIVITY_CLEAR_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) val notificationLayout = RemoteViews(mContext.packageName, R.layout.notification)
notificationLayout.setTextViewText(R.id.notification_title, mContext.getString(R.string.subst)) 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 manager = mContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val channelId = "general" val channelId = "general"
val channelName = mContext.getString(R.string.general) val channelName = mContext.getString(R.string.general)
lateinit var channel: NotificationChannel
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 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.enableLights(true)
channel.lightColor = Color.BLUE channel.lightColor = Color.BLUE
manager.createNotificationChannel(channel) manager.createNotificationChannel(channel)
@@ -1,6 +1,6 @@
package com.denizd.substitutionplan package com.denizd.substitutionplan
class MiscData { object MiscData {
fun emoji(unicode: Int): String { return String(Character.toChars(unicode)) } fun emoji(unicode: Int): String { return String(Character.toChars(unicode)) }
@@ -4,12 +4,7 @@ import android.app.job.JobParameters
import android.app.job.JobService import android.app.job.JobService
import android.content.Context import android.content.Context
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.NetworkInfo
import android.preference.PreferenceManager 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 import java.net.URL
class NotificationService : JobService() { class NotificationService : JobService() {
@@ -31,13 +26,10 @@ class NotificationService : JobService() {
val prefs = PreferenceManager.getDefaultSharedPreferences(context) val prefs = PreferenceManager.getDefaultSharedPreferences(context)
val edit = prefs.edit() val edit = prefs.edit()
val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val statusMobile = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).state val networkStatus = connectivityManager.activeNetworkInfo
val statusWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).state
Thread(Runnable { Thread(Runnable {
if (jobCancelled) { if (jobCancelled || networkStatus == null) {
return@Runnable
} else if (statusMobile != NetworkInfo.State.CONNECTED && statusWifi != NetworkInfo.State.CONNECTED) {
return@Runnable return@Runnable
} }
if (prefs.getBoolean("notif", false)) { if (prefs.getBoolean("notif", false)) {
@@ -45,7 +37,7 @@ class NotificationService : JobService() {
try { try {
val url = URL("https://djd4rkn355.github.io/subst.html") val url = URL("https://djd4rkn355.github.io/subst.html")
val connection = url.openConnection() 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() DataFetcher(true, true, true, context, application, null).execute()
edit.putString("time", connection.getHeaderField("Last-Modified")).apply() edit.putString("time", connection.getHeaderField("Last-Modified")).apply()
} }
@@ -325,7 +325,9 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen
for (i2 in 0 until buttons.size) { for (i2 in 0 until buttons.size) {
buttons[i2].setOnClickListener { buttons[i2].setOnClickListener {
prefs.edit().putInt("bg$titleNoLang", colours[i2]).apply() prefs.edit().putInt("bg$titleNoLang", colours[i2]).apply()
val recyclerViewState = colourRecycler.layoutManager?.onSaveInstanceState()
colourRecycler.adapter = ColourAdapter(getColourList(), this) colourRecycler.adapter = ColourAdapter(getColourList(), this)
colourRecycler.layoutManager?.onRestoreInstanceState(recyclerViewState)
colourPickerDialog.dismiss() colourPickerDialog.dismiss()
} }
} }
+3 -1
View File
@@ -19,7 +19,9 @@
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
app:layout_anchor="@+id/bottom_sheet" app:layout_anchor="@+id/bottom_sheet"
android:layout_gravity="top" android:layout_gravity="top"
android:background="@color/lighthintcolor"/> android:background="@color/lighthintcolor"
android:clickable="false"
android:focusable="false"/>
<com.google.android.material.bottomnavigation.BottomNavigationView <com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav" android:id="@+id/bottom_nav"
+36 -9
View File
@@ -1,30 +1,57 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <com.google.android.material.card.MaterialCardView xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal" android:layout_width="match_parent" android:id="@+id/cardView"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:cardBackgroundColor="@color/lightbackground"
app:cardCornerRadius="8dp"
android:clickable="true" android:clickable="true"
android:focusable="true" android:focusable="true"
style="@style/SelectableItemBackground" android:layout_marginStart="8dp"
android:id="@+id/item_layout"> android:layout_marginEnd="8dp"
android:layout_marginTop="3dp"
android:layout_marginBottom="3dp"
app:cardElevation="1dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView <ImageView
android:id="@+id/item_image" android:id="@+id/item_image"
android:layout_width="24dp" android:layout_width="24dp"
android:layout_height="24dp" android:layout_height="24dp"
android:layout_margin="16dp" android:layout_margin="16dp"
android:tint="@color/textcolor"/> android:layout_marginStart="8dp"
android:tint="@color/textcolor"
app:layout_constraintBottom_toBottomOf="@+id/item_text"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/item_text" />
<TextView <TextView
android:id="@+id/item_text" android:id="@+id/item_text"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="16dp"
android:textAlignment="viewStart"
android:textColor="@color/textcolor" android:textColor="@color/textcolor"
android:layout_gravity="center_vertical"/> app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/item_image"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:id="@+id/item_text_no_lang" android:id="@+id/item_text_no_lang"
android:visibility="gone"/> android:visibility="gone"
tools:ignore="MissingConstraints" />
</LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
+1 -1
View File
@@ -12,7 +12,7 @@
<color name="bgyellow">#635C1F</color> <color name="bgyellow">#635C1F</color>
<color name="bggreen">#355823</color> <color name="bggreen">#355823</color>
<color name="bgteal">#19504B</color> <color name="bgteal">#19504B</color>
<color name="bgcyan">#2F555D</color> <color name="bgcyan">#125a6d</color>
<color name="bgblue">#1F3B5E</color> <color name="bgblue">#1F3B5E</color>
<color name="bgpurple">#42295D</color> <color name="bgpurple">#42295D</color>
<color name="bgpink">#5A2345</color> <color name="bgpink">#5A2345</color>