forked from github/wulkanowy-mirror
add: allow selecting grades to hide
This commit is contained in:
parent
eb63e5eb04
commit
eb08a2cddb
@ -14,6 +14,6 @@ interface GradeDao : BaseDao<Grade> {
|
|||||||
fun loadAll(semesterId: Int, studentId: Int): Flow<List<Grade>>
|
fun loadAll(semesterId: Int, studentId: Int): Flow<List<Grade>>
|
||||||
|
|
||||||
@Query("SELECT * FROM Grades WHERE semester_id = :semesterId AND student_id = :studentId " +
|
@Query("SELECT * FROM Grades WHERE semester_id = :semesterId AND student_id = :studentId " +
|
||||||
"AND entry NOT IN ('1', '1+', '2', '2+', '2-')")
|
"AND entry NOT IN(:censoredEntries)")
|
||||||
fun loadAllCensored(semesterId: Int, studentId: Int): Flow<List<Grade>>
|
fun loadAllCensored(semesterId: Int, studentId: Int, censoredEntries: Array<String>): Flow<List<Grade>>
|
||||||
}
|
}
|
||||||
|
@ -39,16 +39,10 @@ class GradeRepository @Inject constructor(
|
|||||||
private val saveFetchResultMutex = Mutex()
|
private val saveFetchResultMutex = Mutex()
|
||||||
|
|
||||||
private fun loadGrades(semesterId: Int, studentId: Int): Flow<List<Grade>> {
|
private fun loadGrades(semesterId: Int, studentId: Int): Flow<List<Grade>> {
|
||||||
val badGradesHidden = preferencesRepository
|
val hiddenGrades = preferencesRepository.hiddenGrades
|
||||||
.selectedHiddenSettingTiles
|
|
||||||
.contains(DashboardItem.HiddenSettingTile.BAD_GRADES)
|
|
||||||
|
|
||||||
Timber.i("Load grades for semester $semesterId student $studentId / $badGradesHidden")
|
Timber.i("Load grades for semester $semesterId student $studentId")
|
||||||
return if (badGradesHidden) {
|
return gradeDb.loadAllCensored(semesterId, studentId, hiddenGrades.toTypedArray())
|
||||||
gradeDb.loadAllCensored(semesterId, studentId)
|
|
||||||
} else {
|
|
||||||
gradeDb.loadAll(semesterId, studentId)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getGrades(
|
fun getGrades(
|
||||||
@ -78,19 +72,13 @@ class GradeRepository @Inject constructor(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
fetch = {
|
fetch = {
|
||||||
val badGradesHidden = preferencesRepository
|
val hiddenGrades = preferencesRepository.hiddenGrades
|
||||||
.selectedHiddenSettingTiles
|
|
||||||
.contains(DashboardItem.HiddenSettingTile.BAD_GRADES)
|
|
||||||
|
|
||||||
val (details, summary, descriptive) = sdk.init(student)
|
val (details, summary, descriptive) = sdk.init(student)
|
||||||
.switchSemester(semester)
|
.switchSemester(semester)
|
||||||
.getGrades(semester.semesterId)
|
.getGrades(semester.semesterId)
|
||||||
|
|
||||||
val censoredDetails = if (badGradesHidden) {
|
val censoredDetails = details.filterNot { it.entry in hiddenGrades }
|
||||||
details.filter { !listOf("1", "1+", "2", "2+", "2-").contains(it.entry) }
|
|
||||||
} else {
|
|
||||||
details
|
|
||||||
}
|
|
||||||
|
|
||||||
Triple(
|
Triple(
|
||||||
censoredDetails.mapToEntities(semester),
|
censoredDetails.mapToEntities(semester),
|
||||||
|
@ -297,6 +297,18 @@ class PreferencesRepository @Inject constructor(
|
|||||||
set(value) = value?.let { attendancePercentagePreference.set(it) }
|
set(value) = value?.let { attendancePercentagePreference.set(it) }
|
||||||
?: attendancePercentagePreference.delete()
|
?: 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>>
|
private val selectedDashboardTilesPreference: Preference<Set<String>>
|
||||||
get() {
|
get() {
|
||||||
val defaultSet =
|
val defaultSet =
|
||||||
|
@ -149,7 +149,6 @@ sealed class DashboardItem(val type: Type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum class HiddenSettingTile {
|
enum class HiddenSettingTile {
|
||||||
BAD_GRADES,
|
|
||||||
BAD_ATTENDANCE,
|
BAD_ATTENDANCE,
|
||||||
NOTES,
|
NOTES,
|
||||||
ATTENDANCE,
|
ATTENDANCE,
|
||||||
|
@ -105,6 +105,25 @@ class MoreFragment : BaseFragment<FragmentMoreBinding>(R.layout.fragment_more),
|
|||||||
super.onDestroyView()
|
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>) {
|
override fun showHiddenSettings(data: List<DashboardItem.HiddenSettingTile>) {
|
||||||
val entries = requireContext().resources.getStringArray(R.array.hidden_settings_entries)
|
val entries = requireContext().resources.getStringArray(R.array.hidden_settings_entries)
|
||||||
val values = requireContext().resources.getStringArray(R.array.hidden_settings_values)
|
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)
|
presenter.onHiddenSettingsSelected(selectedValues, inputAttendancePercentage)
|
||||||
}
|
}
|
||||||
.setNegativeButton(android.R.string.cancel) { _, _ -> }
|
.setNegativeButton(android.R.string.cancel) { _, _ -> }
|
||||||
|
.setNeutralButton(R.string.pref_hidden_settings_bad_grades_title) { _, _ -> showGradeDialog() }
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +55,11 @@ class MorePresenter @Inject constructor(
|
|||||||
view?.restartApp()
|
view?.restartApp()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun onHiddenGradesSelected(selectedItems: List<String>) {
|
||||||
|
preferencesRepository.hiddenGrades = selectedItems
|
||||||
|
view?.restartApp()
|
||||||
|
}
|
||||||
|
|
||||||
fun onViewReselected() {
|
fun onViewReselected() {
|
||||||
Timber.i("More view is reselected")
|
Timber.i("More view is reselected")
|
||||||
view?.popView(2)
|
view?.popView(2)
|
||||||
|
@ -69,7 +69,6 @@
|
|||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="hidden_settings_entries">
|
<string-array name="hidden_settings_entries">
|
||||||
<item>Špatné hodnocení</item>
|
|
||||||
<item>Špatná účast</item>
|
<item>Špatná účast</item>
|
||||||
<item>Poznámky</item>
|
<item>Poznámky</item>
|
||||||
<item>Falešná účast</item>
|
<item>Falešná účast</item>
|
||||||
|
@ -68,7 +68,6 @@
|
|||||||
<item>Conferences</item>
|
<item>Conferences</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="hidden_settings_entries">
|
<string-array name="hidden_settings_entries">
|
||||||
<item>Bad grades</item>
|
|
||||||
<item>Bad attendance</item>
|
<item>Bad attendance</item>
|
||||||
<item>Notes</item>
|
<item>Notes</item>
|
||||||
<item>Fake attendance</item>
|
<item>Fake attendance</item>
|
||||||
|
@ -68,7 +68,6 @@
|
|||||||
<item>Sitzungen</item>
|
<item>Sitzungen</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="hidden_settings_entries">
|
<string-array name="hidden_settings_entries">
|
||||||
<item>Schlechte Noten</item>
|
|
||||||
<item>Schlechte Anwesenheit</item>
|
<item>Schlechte Anwesenheit</item>
|
||||||
<item>Notizen</item>
|
<item>Notizen</item>
|
||||||
<item>Vorgetäuschte 100-prozentige Anwesenheit</item>
|
<item>Vorgetäuschte 100-prozentige Anwesenheit</item>
|
||||||
|
@ -68,7 +68,6 @@
|
|||||||
<item>Conferences</item>
|
<item>Conferences</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="hidden_settings_entries">
|
<string-array name="hidden_settings_entries">
|
||||||
<item>Bad grades</item>
|
|
||||||
<item>Bad attendance</item>
|
<item>Bad attendance</item>
|
||||||
<item>Notes</item>
|
<item>Notes</item>
|
||||||
<item>Fake attendance</item>
|
<item>Fake attendance</item>
|
||||||
|
@ -68,7 +68,6 @@
|
|||||||
<item>Conferences</item>
|
<item>Conferences</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="hidden_settings_entries">
|
<string-array name="hidden_settings_entries">
|
||||||
<item>Bad grades</item>
|
|
||||||
<item>Bad attendance</item>
|
<item>Bad attendance</item>
|
||||||
<item>Notes</item>
|
<item>Notes</item>
|
||||||
<item>Fake attendance</item>
|
<item>Fake attendance</item>
|
||||||
|
@ -68,7 +68,6 @@
|
|||||||
<item>Zebrania</item>
|
<item>Zebrania</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="hidden_settings_entries">
|
<string-array name="hidden_settings_entries">
|
||||||
<item>Słabe oceny</item>
|
|
||||||
<item>Słaba frekwencja</item>
|
<item>Słaba frekwencja</item>
|
||||||
<item>Uwagi</item>
|
<item>Uwagi</item>
|
||||||
<item>Fałszywa frekwencja</item>
|
<item>Fałszywa frekwencja</item>
|
||||||
|
@ -68,7 +68,6 @@
|
|||||||
<item>Встречи</item>
|
<item>Встречи</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="hidden_settings_entries">
|
<string-array name="hidden_settings_entries">
|
||||||
<item>Плохие оценки</item>
|
|
||||||
<item>Плохая посещаемость</item>
|
<item>Плохая посещаемость</item>
|
||||||
<item>Примечания</item>
|
<item>Примечания</item>
|
||||||
<item>Фейковая посещаемость</item>
|
<item>Фейковая посещаемость</item>
|
||||||
|
@ -68,7 +68,6 @@
|
|||||||
<item>Stretnutie</item>
|
<item>Stretnutie</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="hidden_settings_entries">
|
<string-array name="hidden_settings_entries">
|
||||||
<item>Zlé známky</item>
|
|
||||||
<item>Zlá účasť</item>
|
<item>Zlá účasť</item>
|
||||||
<item>Poznámky</item>
|
<item>Poznámky</item>
|
||||||
<item>Falošná účasť</item>
|
<item>Falošná účasť</item>
|
||||||
|
@ -68,7 +68,6 @@
|
|||||||
<item>Зустрічі</item>
|
<item>Зустрічі</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="hidden_settings_entries">
|
<string-array name="hidden_settings_entries">
|
||||||
<item>Погані оцінки</item>
|
|
||||||
<item>Погана відвідуваність</item>
|
<item>Погана відвідуваність</item>
|
||||||
<item>Примітки</item>
|
<item>Примітки</item>
|
||||||
<item>Фальшива явка</item>
|
<item>Фальшива явка</item>
|
||||||
|
28
app/src/main/res/values/arrays.xml
Normal file
28
app/src/main/res/values/arrays.xml
Normal 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>
|
@ -36,9 +36,7 @@
|
|||||||
<item>GRADES</item>
|
<item>GRADES</item>
|
||||||
<item>ANNOUNCEMENTS</item>
|
<item>ANNOUNCEMENTS</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="pref_default_hidden_settings_tiles">
|
<string-array name="pref_default_hidden_settings_tiles"/>
|
||||||
<item>BAD_GRADES</item>
|
|
||||||
</string-array>
|
|
||||||
<bool name="pref_default_ads_enabled">false</bool>
|
<bool name="pref_default_ads_enabled">false</bool>
|
||||||
<bool name="pref_default_ads_consent_data_processing">false</bool>
|
<bool name="pref_default_ads_consent_data_processing">false</bool>
|
||||||
<bool name="pref_default_incognito_mode">false</bool>
|
<bool name="pref_default_incognito_mode">false</bool>
|
||||||
|
@ -158,13 +158,11 @@
|
|||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="hidden_settings_entries">
|
<string-array name="hidden_settings_entries">
|
||||||
<item>Bad grades</item>
|
|
||||||
<item>Bad attendance</item>
|
<item>Bad attendance</item>
|
||||||
<item>Notes</item>
|
<item>Notes</item>
|
||||||
<item>Fake attendance</item>
|
<item>Fake attendance</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="hidden_settings_values" translatable="false">
|
<string-array name="hidden_settings_values" translatable="false">
|
||||||
<item>BAD_GRADES</item>
|
|
||||||
<item>BAD_ATTENDANCE</item>
|
<item>BAD_ATTENDANCE</item>
|
||||||
<item>NOTES</item>
|
<item>NOTES</item>
|
||||||
<item>ATTENDANCE</item>
|
<item>ATTENDANCE</item>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user