forked from github/wulkanowy-mirror
Add option to change grade (background) color scheme (#259)
This commit is contained in:

committed by
Rafał Borcz

parent
1b30b00bb8
commit
cae4f140e6
@ -1,6 +1,8 @@
|
||||
package io.github.wulkanowy.data.db
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import org.threeten.bp.DateTimeUtils
|
||||
import org.threeten.bp.Instant
|
||||
import org.threeten.bp.LocalDate
|
||||
@ -8,8 +10,6 @@ import org.threeten.bp.LocalDateTime
|
||||
import org.threeten.bp.Month
|
||||
import org.threeten.bp.ZoneOffset
|
||||
import java.util.Date
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.reflect.TypeToken
|
||||
|
||||
class Converters {
|
||||
|
||||
|
@ -30,6 +30,10 @@ class PreferencesRepository @Inject constructor(
|
||||
val gradeMinusModifier: Double
|
||||
get() = sharedPref.getString(context.getString(R.string.pref_key_grade_modifier_minus), "0.0")?.toDouble() ?: 0.0
|
||||
|
||||
val gradeColorTheme: String
|
||||
get() = sharedPref.getString(context.getString(R.string.pref_key_grade_color_scheme), "vulcan") ?: "vulcan"
|
||||
|
||||
|
||||
val serviceEnablesKey: String = context.getString(R.string.pref_key_services_enable)
|
||||
val isServiceEnabled: Boolean
|
||||
get() = sharedPref.getBoolean(serviceEnablesKey, true)
|
||||
|
@ -5,26 +5,30 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.View.GONE
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import io.github.wulkanowy.R
|
||||
import io.github.wulkanowy.data.db.entities.Grade
|
||||
import io.github.wulkanowy.utils.colorStringId
|
||||
import io.github.wulkanowy.utils.getBackgroundColor
|
||||
import io.github.wulkanowy.utils.toFormattedString
|
||||
import io.github.wulkanowy.utils.valueBgColor
|
||||
import kotlinx.android.synthetic.main.dialog_grade.*
|
||||
|
||||
|
||||
class GradeDetailsDialog : DialogFragment() {
|
||||
|
||||
private lateinit var grade: Grade
|
||||
|
||||
private lateinit var colorScheme: String
|
||||
|
||||
companion object {
|
||||
private const val ARGUMENT_KEY = "Item"
|
||||
private const val COLOR_SCHEME_KEY = "Scheme"
|
||||
|
||||
fun newInstance(grade: Grade): GradeDetailsDialog {
|
||||
fun newInstance(grade: Grade, colorScheme: String): GradeDetailsDialog {
|
||||
return GradeDetailsDialog().apply {
|
||||
arguments = Bundle().apply { putSerializable(ARGUMENT_KEY, grade) }
|
||||
arguments = Bundle().apply {
|
||||
putSerializable(ARGUMENT_KEY, grade)
|
||||
putString(COLOR_SCHEME_KEY, colorScheme)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -34,6 +38,7 @@ class GradeDetailsDialog : DialogFragment() {
|
||||
setStyle(STYLE_NO_TITLE, 0)
|
||||
arguments?.run {
|
||||
grade = getSerializable(ARGUMENT_KEY) as Grade
|
||||
colorScheme = getString(COLOR_SCHEME_KEY) ?: "default"
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,7 +63,7 @@ class GradeDetailsDialog : DialogFragment() {
|
||||
|
||||
gradeDialogValue.run {
|
||||
text = grade.entry
|
||||
setBackgroundResource(grade.valueBgColor)
|
||||
setBackgroundResource(grade.getBackgroundColor(colorScheme))
|
||||
}
|
||||
|
||||
gradeDialogTeacherValue.text = if (grade.teacher.isBlank()) {
|
||||
|
@ -134,8 +134,8 @@ class GradeDetailsFragment : BaseSessionFragment(), GradeDetailsView, GradeView.
|
||||
gradeDetailsSwipe.isRefreshing = show
|
||||
}
|
||||
|
||||
override fun showGradeDialog(grade: Grade) {
|
||||
(activity as? MainActivity)?.showDialogFragment(GradeDetailsDialog.newInstance(grade))
|
||||
override fun showGradeDialog(grade: Grade, colorScheme: String) {
|
||||
(activity as? MainActivity)?.showDialogFragment(GradeDetailsDialog.newInstance(grade, colorScheme))
|
||||
}
|
||||
|
||||
override fun onParentLoadData(semesterId: Int, forceRefresh: Boolean) {
|
||||
|
@ -4,7 +4,6 @@ import android.annotation.SuppressLint
|
||||
import android.view.View
|
||||
import android.view.View.GONE
|
||||
import android.view.View.VISIBLE
|
||||
import androidx.core.content.ContextCompat
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
|
||||
import eu.davidea.flexibleadapter.items.IFlexible
|
||||
|
@ -12,7 +12,7 @@ import io.github.wulkanowy.utils.FirebaseAnalyticsHelper
|
||||
import io.github.wulkanowy.utils.SchedulersProvider
|
||||
import io.github.wulkanowy.utils.calcAverage
|
||||
import io.github.wulkanowy.utils.changeModifier
|
||||
import io.github.wulkanowy.utils.valueBgColor
|
||||
import io.github.wulkanowy.utils.getBackgroundColor
|
||||
import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
|
||||
@ -42,7 +42,7 @@ class GradeDetailsPresenter @Inject constructor(
|
||||
if (item is GradeDetailsItem) {
|
||||
Timber.i("Select grade item ${item.grade.id}")
|
||||
view?.apply {
|
||||
showGradeDialog(item.grade)
|
||||
showGradeDialog(item.grade, preferencesRepository.gradeColorTheme)
|
||||
if (!item.grade.isRead) {
|
||||
item.grade.isRead = true
|
||||
updateItem(item)
|
||||
@ -151,7 +151,7 @@ class GradeDetailsPresenter @Inject constructor(
|
||||
GradeDetailsItem(
|
||||
grade = item,
|
||||
weightString = view?.weightString.orEmpty(),
|
||||
valueBgColor = item.valueBgColor
|
||||
valueBgColor = item.getBackgroundColor(preferencesRepository.gradeColorTheme)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ interface GradeDetailsView : BaseSessionView {
|
||||
|
||||
fun collapseAllItems()
|
||||
|
||||
fun showGradeDialog(grade: Grade)
|
||||
fun showGradeDialog(grade: Grade, colorScheme: String)
|
||||
|
||||
fun showContent(show: Boolean)
|
||||
|
||||
|
@ -22,18 +22,36 @@ fun List<GradeSummary>.calcAverage(): Double {
|
||||
}.average().let { if (it.isNaN()) 0.0 else it }
|
||||
}
|
||||
|
||||
inline val Grade.valueBgColor: Int
|
||||
get() {
|
||||
return when (value) {
|
||||
6 -> R.color.grade_six
|
||||
5 -> R.color.grade_five
|
||||
4 -> R.color.grade_four
|
||||
3 -> R.color.grade_three
|
||||
2 -> R.color.grade_two
|
||||
1 -> R.color.grade_one
|
||||
fun Grade.getBackgroundColor(theme: String): Int {
|
||||
return when (theme) {
|
||||
"grade_color" -> when (color) {
|
||||
"000000" -> R.color.grade_black
|
||||
"F04C4C" -> R.color.grade_red
|
||||
"20A4F7" -> R.color.grade_blue
|
||||
"6ECD07" -> R.color.grade_green
|
||||
"B16CF1" -> R.color.grade_purple
|
||||
else -> R.color.grade_default
|
||||
}
|
||||
"material" -> when (value) {
|
||||
6 -> R.color.grade_material_six
|
||||
5 -> R.color.grade_material_five
|
||||
4 -> R.color.grade_material_four
|
||||
3 -> R.color.grade_material_three
|
||||
2 -> R.color.grade_material_two
|
||||
1 -> R.color.grade_material_one
|
||||
else -> R.color.grade_default
|
||||
}
|
||||
else -> when (value) {
|
||||
6 -> R.color.grade_vulcan_six
|
||||
5 -> R.color.grade_vulcan_five
|
||||
4 -> R.color.grade_vulcan_four
|
||||
3 -> R.color.grade_vulcan_three
|
||||
2 -> R.color.grade_vulcan_two
|
||||
1 -> R.color.grade_vulcan_one
|
||||
else -> R.color.grade_default
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inline val Grade.colorStringId: Int
|
||||
get() {
|
||||
|
Reference in New Issue
Block a user