add: allow selecting grades to hide

This commit is contained in:
sadorowo 2024-02-29 10:40:33 +01:00
parent eb63e5eb04
commit eb08a2cddb
18 changed files with 73 additions and 34 deletions

View File

@ -14,6 +14,6 @@ interface GradeDao : BaseDao<Grade> {
fun loadAll(semesterId: Int, studentId: Int): Flow<List<Grade>>
@Query("SELECT * FROM Grades WHERE semester_id = :semesterId AND student_id = :studentId " +
"AND entry NOT IN ('1', '1+', '2', '2+', '2-')")
fun loadAllCensored(semesterId: Int, studentId: Int): Flow<List<Grade>>
"AND entry NOT IN(:censoredEntries)")
fun loadAllCensored(semesterId: Int, studentId: Int, censoredEntries: Array<String>): Flow<List<Grade>>
}

View File

@ -39,16 +39,10 @@ class GradeRepository @Inject constructor(
private val saveFetchResultMutex = Mutex()
private fun loadGrades(semesterId: Int, studentId: Int): Flow<List<Grade>> {
val badGradesHidden = preferencesRepository
.selectedHiddenSettingTiles
.contains(DashboardItem.HiddenSettingTile.BAD_GRADES)
val hiddenGrades = preferencesRepository.hiddenGrades
Timber.i("Load grades for semester $semesterId student $studentId / $badGradesHidden")
return if (badGradesHidden) {
gradeDb.loadAllCensored(semesterId, studentId)
} else {
gradeDb.loadAll(semesterId, studentId)
}
Timber.i("Load grades for semester $semesterId student $studentId")
return gradeDb.loadAllCensored(semesterId, studentId, hiddenGrades.toTypedArray())
}
fun getGrades(
@ -78,19 +72,13 @@ class GradeRepository @Inject constructor(
}
},
fetch = {
val badGradesHidden = preferencesRepository
.selectedHiddenSettingTiles
.contains(DashboardItem.HiddenSettingTile.BAD_GRADES)
val hiddenGrades = preferencesRepository.hiddenGrades
val (details, summary, descriptive) = sdk.init(student)
.switchSemester(semester)
.getGrades(semester.semesterId)
val censoredDetails = if (badGradesHidden) {
details.filter { !listOf("1", "1+", "2", "2+", "2-").contains(it.entry) }
} else {
details
}
val censoredDetails = details.filterNot { it.entry in hiddenGrades }
Triple(
censoredDetails.mapToEntities(semester),

View File

@ -297,6 +297,18 @@ class PreferencesRepository @Inject constructor(
set(value) = value?.let { attendancePercentagePreference.set(it) }
?: attendancePercentagePreference.delete()
var hiddenGrades: List<String>
get() = hiddenGradesPreference.get().toList()
set(value) = hiddenGradesPreference.set(value.toSet())
private val hiddenGradesPreference: Preference<Set<String>>
get() {
val defaultSet = context.resources.getStringArray(R.array.pref_default_hidden_grades).toSet()
val prefKey = "hidden_grades"
return flowSharedPref.getStringSet(prefKey, defaultSet)
}
private val selectedDashboardTilesPreference: Preference<Set<String>>
get() {
val defaultSet =

View File

@ -149,7 +149,6 @@ sealed class DashboardItem(val type: Type) {
}
enum class HiddenSettingTile {
BAD_GRADES,
BAD_ATTENDANCE,
NOTES,
ATTENDANCE,

View File

@ -105,6 +105,25 @@ class MoreFragment : BaseFragment<FragmentMoreBinding>(R.layout.fragment_more),
super.onDestroyView()
}
private fun showGradeDialog() {
val hiddenGrades = preferencesRepository.hiddenGrades
val grades = requireContext().resources.getStringArray(R.array.hidden_settings_bad_grades)
val selectedItemsState = grades.map { grade -> hiddenGrades.any { it == grade } }
MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.pref_hidden_settings_bad_grades_title)
.setMultiChoiceItems(grades, selectedItemsState.toBooleanArray()) { _, _, _ -> }
.setPositiveButton(android.R.string.ok) { dialog, _ ->
val selectedState = (dialog as AlertDialog).listView.checkedItemPositions
val selectedValues = grades.filterIndexed { index, _ -> selectedState[index] }
Timber.i("Selected hidden grades: $selectedValues")
presenter.onHiddenGradesSelected(selectedValues)
}
.show()
}
override fun showHiddenSettings(data: List<DashboardItem.HiddenSettingTile>) {
val entries = requireContext().resources.getStringArray(R.array.hidden_settings_entries)
val values = requireContext().resources.getStringArray(R.array.hidden_settings_values)
@ -144,6 +163,7 @@ class MoreFragment : BaseFragment<FragmentMoreBinding>(R.layout.fragment_more),
presenter.onHiddenSettingsSelected(selectedValues, inputAttendancePercentage)
}
.setNegativeButton(android.R.string.cancel) { _, _ -> }
.setNeutralButton(R.string.pref_hidden_settings_bad_grades_title) { _, _ -> showGradeDialog() }
.show()
}

View File

@ -55,6 +55,11 @@ class MorePresenter @Inject constructor(
view?.restartApp()
}
fun onHiddenGradesSelected(selectedItems: List<String>) {
preferencesRepository.hiddenGrades = selectedItems
view?.restartApp()
}
fun onViewReselected() {
Timber.i("More view is reselected")
view?.popView(2)

View File

@ -69,7 +69,6 @@
</string-array>
<string-array name="hidden_settings_entries">
<item>Špatné hodnocení</item>
<item>Špatná účast</item>
<item>Poznámky</item>
<item>Falešná účast</item>

View File

@ -68,7 +68,6 @@
<item>Conferences</item>
</string-array>
<string-array name="hidden_settings_entries">
<item>Bad grades</item>
<item>Bad attendance</item>
<item>Notes</item>
<item>Fake attendance</item>

View File

@ -68,7 +68,6 @@
<item>Sitzungen</item>
</string-array>
<string-array name="hidden_settings_entries">
<item>Schlechte Noten</item>
<item>Schlechte Anwesenheit</item>
<item>Notizen</item>
<item>Vorgetäuschte 100-prozentige Anwesenheit</item>

View File

@ -68,7 +68,6 @@
<item>Conferences</item>
</string-array>
<string-array name="hidden_settings_entries">
<item>Bad grades</item>
<item>Bad attendance</item>
<item>Notes</item>
<item>Fake attendance</item>

View File

@ -68,7 +68,6 @@
<item>Conferences</item>
</string-array>
<string-array name="hidden_settings_entries">
<item>Bad grades</item>
<item>Bad attendance</item>
<item>Notes</item>
<item>Fake attendance</item>

View File

@ -68,7 +68,6 @@
<item>Zebrania</item>
</string-array>
<string-array name="hidden_settings_entries">
<item>Słabe oceny</item>
<item>Słaba frekwencja</item>
<item>Uwagi</item>
<item>Fałszywa frekwencja</item>

View File

@ -68,7 +68,6 @@
<item>Встречи</item>
</string-array>
<string-array name="hidden_settings_entries">
<item>Плохие оценки</item>
<item>Плохая посещаемость</item>
<item>Примечания</item>
<item>Фейковая посещаемость</item>

View File

@ -68,7 +68,6 @@
<item>Stretnutie</item>
</string-array>
<string-array name="hidden_settings_entries">
<item>Zlé známky</item>
<item>Zlá účasť</item>
<item>Poznámky</item>
<item>Falošná účasť</item>

View File

@ -68,7 +68,6 @@
<item>Зустрічі</item>
</string-array>
<string-array name="hidden_settings_entries">
<item>Погані оцінки</item>
<item>Погана відвідуваність</item>
<item>Примітки</item>
<item>Фальшива явка</item>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="hidden_settings_bad_grades">
<item>1</item>
<item>1+</item>
<item>2-</item>
<item>2</item>
<item>2+</item>
<item>3-</item>
<item>3</item>
<item>3+</item>
<item>4-</item>
<item>4</item>
<item>4+</item>
<item>5-</item>
<item>5</item>
<item>5+</item>
<item>6</item>
<item>6-</item>
</string-array>
<string-array name="pref_default_hidden_grades">
<item>1</item>
<item>1+</item>
<item>2-</item>
<item>2</item>
<item>2+</item>
</string-array>
</resources>

View File

@ -36,9 +36,7 @@
<item>GRADES</item>
<item>ANNOUNCEMENTS</item>
</string-array>
<string-array name="pref_default_hidden_settings_tiles">
<item>BAD_GRADES</item>
</string-array>
<string-array name="pref_default_hidden_settings_tiles"/>
<bool name="pref_default_ads_enabled">false</bool>
<bool name="pref_default_ads_consent_data_processing">false</bool>
<bool name="pref_default_incognito_mode">false</bool>

View File

@ -158,13 +158,11 @@
</string-array>
<string-array name="hidden_settings_entries">
<item>Bad grades</item>
<item>Bad attendance</item>
<item>Notes</item>
<item>Fake attendance</item>
</string-array>
<string-array name="hidden_settings_values" translatable="false">
<item>BAD_GRADES</item>
<item>BAD_ATTENDANCE</item>
<item>NOTES</item>
<item>ATTENDANCE</item>