From 0b75635ad5b653b60ec056d7501416620b43ae2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Sat, 16 May 2020 22:21:14 +0200 Subject: [PATCH] Add option to hide/show chart list in grade class stats (#807) --- .../preferences/PreferencesRepository.kt | 3 +++ .../statistics/GradeStatisticsAdapter.kt | 6 +++-- .../statistics/GradeStatisticsFragment.kt | 16 ++++++------- .../statistics/GradeStatisticsPresenter.kt | 23 ++++++++----------- .../grade/statistics/GradeStatisticsView.kt | 2 +- .../res/layout/fragment_grade_statistics.xml | 6 ++--- app/src/main/res/values-pl/strings.xml | 1 + .../main/res/values/preferences_defaults.xml | 1 + app/src/main/res/values/preferences_keys.xml | 1 + app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/scheme_preferences.xml | 9 ++++++-- 11 files changed, 39 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/preferences/PreferencesRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/preferences/PreferencesRepository.kt index 523caf6c9..b7a539925 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/preferences/PreferencesRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/preferences/PreferencesRepository.kt @@ -26,6 +26,9 @@ class PreferencesRepository @Inject constructor( val isGradeExpandable: Boolean get() = !getBoolean(R.string.pref_key_expand_grade, R.bool.pref_default_expand_grade) + val showAllSubjectsOnStatisticsList: Boolean + get() = getBoolean(R.string.pref_key_grade_statistics_list, R.bool.pref_default_grade_statistics_list) + val appThemeKey = context.getString(R.string.pref_key_app_theme) val appTheme: String get() = getString(appThemeKey, R.string.pref_default_app_theme) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsAdapter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsAdapter.kt index 8c1f0b0d6..dbb60910a 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsAdapter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsAdapter.kt @@ -32,6 +32,8 @@ class GradeStatisticsAdapter @Inject constructor() : var theme: String = "vulcan" + var showAllSubjectsOnList: Boolean = false + private val vulcanGradeColors = listOf( 6 to R.color.grade_vulcan_six, 5 to R.color.grade_vulcan_five, @@ -59,7 +61,7 @@ class GradeStatisticsAdapter @Inject constructor() : "6, 6-", "5, 5-, 5+", "4, 4-, 4+", "3, 3-, 3+", "2, 2-, 2+", "1, 1+" ) - override fun getItemCount() = items.size + override fun getItemCount() = if (showAllSubjectsOnList) items.size else (if (items.isEmpty()) 0 else 1) override fun getItemViewType(position: Int) = items[position].type.id @@ -82,7 +84,7 @@ class GradeStatisticsAdapter @Inject constructor() : private fun bindPieChart(holder: PieViewHolder, partials: List) { with(holder.binding.gradeStatisticsPieTitle) { text = partials.firstOrNull()?.subject - visibility = if (items.size == 1) GONE else VISIBLE + visibility = if (items.size == 1 || !showAllSubjectsOnList) GONE else VISIBLE } val gradeColors = when (theme) { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsFragment.kt index c6786dbcc..3a8f40073 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsFragment.kt @@ -80,17 +80,17 @@ class GradeStatisticsFragment : } } - override fun updateData(items: List, theme: String) { - statisticsAdapter.theme = theme - statisticsAdapter.items = items - statisticsAdapter.notifyDataSetChanged() + override fun updateData(items: List, theme: String, showAllSubjectsOnStatisticsList: Boolean) { + with(statisticsAdapter) { + this.showAllSubjectsOnList = showAllSubjectsOnStatisticsList + this.theme = theme + this.items = items + notifyDataSetChanged() + } } override fun showSubjects(show: Boolean) { - with(binding) { - gradeStatisticsSubjectsContainer.visibility = if (show) View.VISIBLE else View.INVISIBLE - gradeStatisticsTypeSwitch.visibility = if (show) View.VISIBLE else View.INVISIBLE - } + binding.gradeStatisticsSubjectsContainer.visibility = if (show) View.VISIBLE else View.GONE } override fun clearView() { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsPresenter.kt index 90c4e38ef..5cc733cd0 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsPresenter.kt @@ -128,10 +128,7 @@ class GradeStatisticsPresenter @Inject constructor( .observeOn(schedulers.mainThread) .subscribe({ Timber.i("Loading grade stats subjects result: Success") - view?.run { - updateSubjects(it) - showSubjects(true) - } + view?.updateSubjects(it) }, { Timber.i("Loading grade stats subjects result: An exception occurred") errorHandler.dispatch(it) @@ -140,22 +137,21 @@ class GradeStatisticsPresenter @Inject constructor( } private fun loadDataByType(semesterId: Int, subjectName: String, type: ViewType, forceRefresh: Boolean = false) { - currentSubjectName = subjectName + currentSubjectName = if (preferencesRepository.showAllSubjectsOnStatisticsList) "Wszystkie" else subjectName currentType = type - loadData(semesterId, subjectName, type, forceRefresh) - } - private fun loadData(semesterId: Int, subjectName: String, type: ViewType, forceRefresh: Boolean) { Timber.i("Loading grade stats data started") disposable.add(studentRepository.getCurrentStudent() .flatMap { student -> semesterRepository.getSemesters(student).flatMap { semesters -> val semester = semesters.first { item -> item.semesterId == semesterId } - when (type) { - ViewType.SEMESTER -> gradeStatisticsRepository.getGradesStatistics(student, semester, subjectName, true, forceRefresh) - ViewType.PARTIAL -> gradeStatisticsRepository.getGradesStatistics(student, semester, subjectName, false, forceRefresh) - ViewType.POINTS -> gradeStatisticsRepository.getGradesPointsStatistics(student, semester, subjectName, forceRefresh) + with(gradeStatisticsRepository) { + when (type) { + ViewType.SEMESTER -> getGradesStatistics(student, semester, currentSubjectName, true, forceRefresh) + ViewType.PARTIAL -> getGradesStatistics(student, semester, currentSubjectName, false, forceRefresh) + ViewType.POINTS -> getGradesPointsStatistics(student, semester, currentSubjectName, forceRefresh) + } } } } @@ -175,7 +171,8 @@ class GradeStatisticsPresenter @Inject constructor( showEmpty(it.isEmpty()) showContent(it.isNotEmpty()) showErrorView(false) - updateData(it, preferencesRepository.gradeColorTheme) + updateData(it, preferencesRepository.gradeColorTheme, preferencesRepository.showAllSubjectsOnStatisticsList) + showSubjects(!preferencesRepository.showAllSubjectsOnStatisticsList) } analytics.logEvent("load_grade_statistics", "items" to it.size, "force_refresh" to forceRefresh) }) { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsView.kt index 9ba8524c2..26b4a119a 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsView.kt @@ -13,7 +13,7 @@ interface GradeStatisticsView : BaseView { fun updateSubjects(data: ArrayList) - fun updateData(items: List, theme: String) + fun updateData(items: List, theme: String, showAllSubjectsOnStatisticsList: Boolean) fun showSubjects(show: Boolean) diff --git a/app/src/main/res/layout/fragment_grade_statistics.xml b/app/src/main/res/layout/fragment_grade_statistics.xml index ecc2e3e00..b3fcac448 100644 --- a/app/src/main/res/layout/fragment_grade_statistics.xml +++ b/app/src/main/res/layout/fragment_grade_statistics.xml @@ -12,7 +12,7 @@ android:layout_height="wrap_content" android:background="?android:windowBackground" android:padding="5dp" - android:visibility="invisible" + android:visibility="gone" tools:ignore="UnusedAttribute" tools:listitem="@layout/item_attendance_summary" tools:visibility="visible"> @@ -59,9 +59,7 @@ android:orientation="horizontal" android:paddingStart="16dp" android:paddingTop="5dp" - android:paddingEnd="16dp" - android:visibility="invisible" - tools:visibility="visible"> + android:paddingEnd="16dp"> Pokazuj obecność we frekwencji Motyw aplikacji Rozwiń oceny + Pokazuj listę wykresów w ocenach klasy Pokazuj lekcje całej klasy Schemat kolorów ocen Język aplikacji diff --git a/app/src/main/res/values/preferences_defaults.xml b/app/src/main/res/values/preferences_defaults.xml index be31b440f..29e8751e4 100644 --- a/app/src/main/res/values/preferences_defaults.xml +++ b/app/src/main/res/values/preferences_defaults.xml @@ -5,6 +5,7 @@ only_one_semester false false + false light vulcan system diff --git a/app/src/main/res/values/preferences_keys.xml b/app/src/main/res/values/preferences_keys.xml index 559e2159c..6d683f3f8 100644 --- a/app/src/main/res/values/preferences_keys.xml +++ b/app/src/main/res/values/preferences_keys.xml @@ -7,6 +7,7 @@ expand_grade grade_average_mode grade_average_always_calc + grade_statistics_list app_language services_enable services_interval diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c2cbeada2..4deba2130 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -347,6 +347,7 @@ Show presence in attendance Application theme Expand grades + Show chart list in class grades Show whole class lessons Grades color scheme App language diff --git a/app/src/main/res/xml/scheme_preferences.xml b/app/src/main/res/xml/scheme_preferences.xml index bb9eb5fcd..b4adabb98 100644 --- a/app/src/main/res/xml/scheme_preferences.xml +++ b/app/src/main/res/xml/scheme_preferences.xml @@ -29,6 +29,11 @@ app:iconSpaceReserved="false" app:key="@string/pref_key_expand_grade" app:title="@string/pref_view_expand_grade" /> + + app:key="@string/pref_key_services_force_sync" + app:title="@string/pref_services_force_sync" />