Add option to change grade (background) color scheme (#259)

This commit is contained in:
Mikołaj Pich
2019-03-03 15:11:20 +01:00
committed by Rafał Borcz
parent 1b30b00bb8
commit cae4f140e6
17 changed files with 104 additions and 35 deletions

View File

@ -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 {

View File

@ -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)

View File

@ -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()) {

View File

@ -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) {

View File

@ -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

View File

@ -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)
)
}
}

View File

@ -28,7 +28,7 @@ interface GradeDetailsView : BaseSessionView {
fun collapseAllItems()
fun showGradeDialog(grade: Grade)
fun showGradeDialog(grade: Grade, colorScheme: String)
fun showContent(show: Boolean)

View File

@ -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() {