From 62b824f68f714aca72f6d8c14ec48bd3fcde1b11 Mon Sep 17 00:00:00 2001 From: xAxee <50153178+xAxee@users.noreply.github.com> Date: Sat, 2 Dec 2023 20:01:28 +0100 Subject: [PATCH] Adding new features to attendance --- app/build.gradle | 2 +- .../config/ProfileConfigAttendance.kt | 2 ++ .../attendance/AttendanceSummaryFragment.kt | 8 ++++- .../ui/attendance/models/AttendanceSubject.kt | 1 + .../viewholder/SubjectViewHolder.kt | 9 +++++ .../settings/AttendanceConfigDialog.kt | 18 ++++++++++ .../utils/managers/AttendanceManager.kt | 4 +++ .../res/layout/attendance_config_dialog.xml | 35 ++++++++++++++++++- app/src/main/res/values-en/strings.xml | 1 + app/src/main/res/values/strings.xml | 3 ++ 10 files changed, 80 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0ceae1a1..b1ab39fc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -104,7 +104,7 @@ android { externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" - version "3.10.2" + version "3.22.1" } } lint { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigAttendance.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigAttendance.kt index ba4f9deb..7e01502b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigAttendance.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigAttendance.kt @@ -11,4 +11,6 @@ class ProfileConfigAttendance(base: ProfileConfig) { var groupConsecutiveDays by base.config(true) var showPresenceInMonth by base.config(false) var useSymbols by base.config(false) + var showDifference by base.config(false) + var sortedDescending by base.config(false) } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/attendance/AttendanceSummaryFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/attendance/AttendanceSummaryFragment.kt index 828e5a95..8597ac50 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/attendance/AttendanceSummaryFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/attendance/AttendanceSummaryFragment.kt @@ -215,6 +215,8 @@ class AttendanceSummaryFragment : LazyFragment(), CoroutineScope { totalCountSum += totalCount presenceCountSum += presenceCount + subject.presenceDifference = presenceCount - (totalCount-presenceCount); + subject.percentage = if (totalCount == 0) 0f else @@ -286,7 +288,11 @@ class AttendanceSummaryFragment : LazyFragment(), CoroutineScope { } } - return items.toMutableList() + if(manager.sortedDescending){ + return items.sortedByDescending { it.percentage }.toMutableList(); + } else { + return items.toMutableList() + } } private fun animatePercentageIndicator(targetProgress: Double) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/attendance/models/AttendanceSubject.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/attendance/models/AttendanceSubject.kt index db5f34a1..f3a7c178 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/attendance/models/AttendanceSubject.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/attendance/models/AttendanceSubject.kt @@ -23,4 +23,5 @@ data class AttendanceSubject( var typeCountMap: Map = mapOf() var percentage: Float = 0f + var presenceDifference: Int = 0 } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/attendance/viewholder/SubjectViewHolder.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/attendance/viewholder/SubjectViewHolder.kt index a7e5e562..4efb91f3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/attendance/viewholder/SubjectViewHolder.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/attendance/viewholder/SubjectViewHolder.kt @@ -49,6 +49,15 @@ class SubjectViewHolder( } else { b.percentage.setText(R.string.attendance_percentage_format, item.percentage) + + if(manager.showDifference){ + val differenceText = if(item.presenceDifference > 0) + "+" + item.presenceDifference + else + item.presenceDifference + + b.percentage.setText(b.percentage.text.toString() + " | " + differenceText); + } } } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/settings/AttendanceConfigDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/settings/AttendanceConfigDialog.kt index b4734141..1f8bfcf1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/settings/AttendanceConfigDialog.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/settings/AttendanceConfigDialog.kt @@ -6,9 +6,11 @@ package pl.szczodrzynski.edziennik.ui.dialogs.settings import android.view.LayoutInflater import androidx.appcompat.app.AppCompatActivity +import com.google.android.material.dialog.MaterialAlertDialogBuilder import pl.szczodrzynski.edziennik.R import pl.szczodrzynski.edziennik.databinding.AttendanceConfigDialogBinding import pl.szczodrzynski.edziennik.ext.onChange +import pl.szczodrzynski.edziennik.ext.onClick import pl.szczodrzynski.edziennik.ui.dialogs.base.ConfigDialog class AttendanceConfigDialog( @@ -33,6 +35,8 @@ class AttendanceConfigDialog( b.useSymbols.isChecked = app.profile.config.attendance.useSymbols b.groupConsecutiveDays.isChecked = app.profile.config.attendance.groupConsecutiveDays b.showPresenceInMonth.isChecked = app.profile.config.attendance.showPresenceInMonth + b.showDifference.isChecked = app.profile.config.attendance.showDifference + b.sortedDescending.isChecked = app.profile.config.attendance.sortedDescending } override fun initView() { @@ -45,5 +49,19 @@ class AttendanceConfigDialog( b.showPresenceInMonth.onChange { _, isChecked -> app.profile.config.attendance.showPresenceInMonth = isChecked } + b.showDifference.onChange { _, isChecked -> + app.profile.config.attendance.showDifference = isChecked + } + b.sortedDescending.onChange { _, isChecked -> + app.profile.config.attendance.sortedDescending = isChecked + } + + b.showDifferenceHelp.onClick { + MaterialAlertDialogBuilder(activity) + .setTitle(R.string.attendance_config_show_difference) + .setMessage(R.string.attendance_config_show_difference_message) + .setPositiveButton(R.string.ok, null) + .show() + } } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/AttendanceManager.kt b/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/AttendanceManager.kt index 5b112af9..12e2611d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/AttendanceManager.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/managers/AttendanceManager.kt @@ -25,6 +25,10 @@ class AttendanceManager(val app: App) : CoroutineScope { val useSymbols get() = app.profile.config.attendance.useSymbols + val showDifference + get() = app.profile.config.attendance.showDifference + val sortedDescending + get() = app.profile.config.attendance.sortedDescending fun getTypeShort(baseType: Int): String { return when (baseType) { diff --git a/app/src/main/res/layout/attendance_config_dialog.xml b/app/src/main/res/layout/attendance_config_dialog.xml index a75da4ac..5603b35e 100644 --- a/app/src/main/res/layout/attendance_config_dialog.xml +++ b/app/src/main/res/layout/attendance_config_dialog.xml @@ -3,7 +3,9 @@ ~ Copyright (c) Kuba Szczodrzyński 2020-5-4. --> - + + + + + + + + + diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index ff2c1c3a..4c9b97c4 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -1433,4 +1433,5 @@ Agenda settings Share notes All lessons: + Display attendance differences diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e4204e21..4794791b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -63,6 +63,9 @@ su Grupuj kolejne dni na liście Wyświetlaj obecność w widoku miesięcy + Wyświetlaj różnice obecności + Wyświetla różnice między obecnościami a nieobecnościami (Ile lekcji potrzebujesz lub możesz nie mieć aby mieć nadal 50%) \n\nnp. -1 oznacza, że brakuje ci jednej lekcji do 50% + Sortuj od największej obecności Konfiguracja frekwencji Używaj symboli i kolorów wg dziennika Widoczne po rozwinięciu listy