From 92bad9d1125ef175e04fd894f310731810731068 Mon Sep 17 00:00:00 2001 From: sadorowo Date: Thu, 21 Mar 2024 23:21:06 +0100 Subject: [PATCH] add: hiding grades, notes and attendance entries --- .editorconfig | 2 +- .../wulkanowy/data/db/dao/AttendanceDao.kt | 9 +- .../github/wulkanowy/data/db/dao/NoteDao.kt | 3 - .../data/repositories/AttendanceRepository.kt | 104 +++++++++++++----- .../data/repositories/NoteRepository.kt | 30 +---- .../repositories/PreferencesRepository.kt | 63 +++++------ .../summary/AttendanceSummaryAdapter.kt | 6 +- .../ui/modules/dashboard/DashboardItem.kt | 6 - .../modules/dashboard/DashboardPresenter.kt | 2 +- .../ui/modules/note/NotePresenter.kt | 15 +++ .../mod_settings/ModSettingsFragment.kt | 24 +--- .../mod_settings/ModSettingsPresenter.kt | 1 + .../settings/mod_settings/ModSettingsView.kt | 1 - app/src/main/res/values-cs/mod_values.xml | 6 - app/src/main/res/values-da-rDK/mod_values.xml | 6 - app/src/main/res/values-de/mod_values.xml | 6 - app/src/main/res/values-es-rES/mod_values.xml | 6 - app/src/main/res/values-it-rIT/mod_values.xml | 6 - app/src/main/res/values-pl/mod_values.xml | 6 - app/src/main/res/values-ru/mod_values.xml | 6 - app/src/main/res/values-sk/mod_values.xml | 6 - app/src/main/res/values-uk/mod_values.xml | 6 - app/src/main/res/values/integers.xml | 4 - app/src/main/res/values/mod_values.xml | 18 +-- .../xml/scheme_preferences_mod_settings.xml | 62 ++++------- 25 files changed, 156 insertions(+), 248 deletions(-) delete mode 100644 app/src/main/res/values/integers.xml diff --git a/.editorconfig b/.editorconfig index 35fbd466..7c537735 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,7 +1,7 @@ [*] charset=utf-8 end_of_line=lf -insert_final_newline=true +insert_final_newline=Advanced indent_style=space indent_size=4 diff --git a/app/src/main/java/io/github/wulkanowy/data/db/dao/AttendanceDao.kt b/app/src/main/java/io/github/wulkanowy/data/db/dao/AttendanceDao.kt index 9b6759b2..7d20c9a7 100644 --- a/app/src/main/java/io/github/wulkanowy/data/db/dao/AttendanceDao.kt +++ b/app/src/main/java/io/github/wulkanowy/data/db/dao/AttendanceDao.kt @@ -3,6 +3,7 @@ package io.github.wulkanowy.data.db.dao import androidx.room.Dao import androidx.room.Query import io.github.wulkanowy.data.db.entities.Attendance +import io.github.wulkanowy.ui.modules.dashboard.DashboardItem import kotlinx.coroutines.flow.Flow import java.time.LocalDate import javax.inject.Singleton @@ -18,12 +19,4 @@ interface AttendanceDao : BaseDao { start: LocalDate, end: LocalDate ): Flow> - - @Query("SELECT * FROM Attendance WHERE diary_id = :diaryId AND student_id = :studentId AND date >= :start AND date <= :end AND (presence OR excused)") - fun loadAllCensored( - diaryId: Int, - studentId: Int, - start: LocalDate, - end: LocalDate - ): Flow> } diff --git a/app/src/main/java/io/github/wulkanowy/data/db/dao/NoteDao.kt b/app/src/main/java/io/github/wulkanowy/data/db/dao/NoteDao.kt index 972ef3df..98de5ba3 100644 --- a/app/src/main/java/io/github/wulkanowy/data/db/dao/NoteDao.kt +++ b/app/src/main/java/io/github/wulkanowy/data/db/dao/NoteDao.kt @@ -11,7 +11,4 @@ import javax.inject.Singleton interface NoteDao : BaseDao { @Query("SELECT * FROM Notes WHERE student_id = :studentId") fun loadAll(studentId: Int): Flow> - - @Query("SELECT * FROM Notes WHERE student_id = :studentId AND 1 != 1") - fun pretendLoadingAll(studentId: Int): Flow> } diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/AttendanceRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/AttendanceRepository.kt index eb8656de..ebe6f5db 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/AttendanceRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/AttendanceRepository.kt @@ -9,6 +9,7 @@ import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.mappers.mapToEntities import io.github.wulkanowy.data.networkBoundResource import io.github.wulkanowy.sdk.pojo.Absent +import io.github.wulkanowy.sdk.pojo.Attendance as SdkAttendance import io.github.wulkanowy.ui.modules.dashboard.DashboardItem import io.github.wulkanowy.utils.AutoRefreshHelper import io.github.wulkanowy.utils.getRefreshKey @@ -16,6 +17,7 @@ import io.github.wulkanowy.utils.monday import io.github.wulkanowy.utils.sunday import io.github.wulkanowy.utils.uniqueSubtract import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map import kotlinx.coroutines.sync.Mutex import java.time.LocalDate import java.time.LocalDateTime @@ -36,6 +38,64 @@ class AttendanceRepository @Inject constructor( private val cacheKey = "attendance" + private fun filterAttendance( + hiddenAttendanceTiles: List, + attendanceItem: Attendance + ): Boolean { + return when { + attendanceItem.absence && attendanceItem.excused && hiddenAttendanceTiles.contains( + DashboardItem.HiddenAttendanceTile.EXCUSED_ABSENCE + ) -> false + + attendanceItem.absence && !attendanceItem.excused && hiddenAttendanceTiles.contains( + DashboardItem.HiddenAttendanceTile.UNEXCUSED_ABSENCE + ) -> false + + attendanceItem.lateness && attendanceItem.excused && hiddenAttendanceTiles.contains( + DashboardItem.HiddenAttendanceTile.EXCUSED_LATENESS + ) -> false + + attendanceItem.lateness && !attendanceItem.excused && hiddenAttendanceTiles.contains( + DashboardItem.HiddenAttendanceTile.UNEXCUSED_LATENESS + ) -> false + + attendanceItem.exemption && hiddenAttendanceTiles.contains(DashboardItem.HiddenAttendanceTile.EXEMPTION) -> false + attendanceItem.deleted && hiddenAttendanceTiles.contains(DashboardItem.HiddenAttendanceTile.DELETED) -> false + attendanceItem.presence && hiddenAttendanceTiles.contains(DashboardItem.HiddenAttendanceTile.PRESENT) -> false + + else -> !hiddenAttendanceTiles.contains(DashboardItem.HiddenAttendanceTile.UNKNOWN) + } + } + + private fun filterAttendance( + hiddenAttendanceTiles: List, + attendanceItem: SdkAttendance + ): Boolean { + return when { + attendanceItem.absence && attendanceItem.excused && hiddenAttendanceTiles.contains( + DashboardItem.HiddenAttendanceTile.EXCUSED_ABSENCE + ) -> false + + attendanceItem.absence && !attendanceItem.excused && hiddenAttendanceTiles.contains( + DashboardItem.HiddenAttendanceTile.UNEXCUSED_ABSENCE + ) -> false + + attendanceItem.lateness && attendanceItem.excused && hiddenAttendanceTiles.contains( + DashboardItem.HiddenAttendanceTile.EXCUSED_LATENESS + ) -> false + + attendanceItem.lateness && !attendanceItem.excused && hiddenAttendanceTiles.contains( + DashboardItem.HiddenAttendanceTile.UNEXCUSED_LATENESS + ) -> false + + attendanceItem.exemption && hiddenAttendanceTiles.contains(DashboardItem.HiddenAttendanceTile.EXEMPTION) -> false + attendanceItem.deleted && hiddenAttendanceTiles.contains(DashboardItem.HiddenAttendanceTile.DELETED) -> false + attendanceItem.presence && hiddenAttendanceTiles.contains(DashboardItem.HiddenAttendanceTile.PRESENT) -> false + + else -> !hiddenAttendanceTiles.contains(DashboardItem.HiddenAttendanceTile.UNKNOWN) + } + } + fun getAttendance( student: Student, semester: Semester, @@ -53,30 +113,16 @@ class AttendanceRepository @Inject constructor( it.isEmpty() || forceRefresh || isExpired }, query = { - val badAttendanceHidden = preferencesRepository - .selectedHiddenSettingTiles - .contains(DashboardItem.HiddenSettingTile.NOTES) + val hiddenAttendanceItems = preferencesRepository.hiddenAttendanceItems - if (badAttendanceHidden) { - attendanceDb.loadAllCensored( - semester.diaryId, - semester.studentId, - start.monday, - end.sunday - ) - } else { - attendanceDb.loadAll( - semester.diaryId, - semester.studentId, - start.monday, - end.sunday - ) - } + attendanceDb + .loadAll(semester.diaryId, semester.studentId, start.monday, end.sunday) + .map { + it.filter { item -> filterAttendance(hiddenAttendanceItems, item) } + } }, fetch = { - val badAttendanceHidden = preferencesRepository - .selectedHiddenSettingTiles - .contains(DashboardItem.HiddenSettingTile.NOTES) + val hiddenAttendanceItems = preferencesRepository.hiddenAttendanceItems val lessons = timetableDb.load( semester.diaryId, semester.studentId, start.monday, end.sunday @@ -84,7 +130,7 @@ class AttendanceRepository @Inject constructor( wulkanowySdkFactory.create(student, semester) .getAttendance(start.monday, end.sunday) - .filter { !badAttendanceHidden || (it.presence || it.excused) } + .filter { item -> filterAttendance(hiddenAttendanceItems, item) } .mapToEntities(semester, lessons) }, saveFetchResult = { old, new -> @@ -105,15 +151,13 @@ class AttendanceRepository @Inject constructor( start: LocalDate, end: LocalDate ): Flow> { - val badAttendanceHidden = preferencesRepository - .selectedHiddenSettingTiles - .contains(DashboardItem.HiddenSettingTile.BAD_ATTENDANCE) + val hiddenAttendanceItems = preferencesRepository.hiddenAttendanceItems - return if (badAttendanceHidden) { - attendanceDb.loadAllCensored(semester.diaryId, semester.studentId, start, end) - } else { - attendanceDb.loadAll(semester.diaryId, semester.studentId, start, end) - } + return attendanceDb + .loadAll(semester.diaryId, semester.studentId, start.monday, end.sunday) + .map { + it.filter { item -> filterAttendance(hiddenAttendanceItems, item) } + } } suspend fun updateTimetable(timetable: List) { diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/NoteRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/NoteRepository.kt index d39bdd4b..6be0928e 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/NoteRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/NoteRepository.kt @@ -7,7 +7,6 @@ import io.github.wulkanowy.data.db.entities.Semester import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.mappers.mapToEntities import io.github.wulkanowy.data.networkBoundResource -import io.github.wulkanowy.ui.modules.dashboard.DashboardItem import io.github.wulkanowy.utils.AutoRefreshHelper import io.github.wulkanowy.utils.getRefreshKey import io.github.wulkanowy.utils.toLocalDate @@ -41,27 +40,16 @@ class NoteRepository @Inject constructor( val isExpired = refreshHelper.shouldBeRefreshed( getRefreshKey(cacheKey, semester) ) + it.isEmpty() || forceRefresh || isExpired }, - query = { - val notesHidden = preferencesRepository - .selectedHiddenSettingTiles - .contains(DashboardItem.HiddenSettingTile.NOTES) - - if (notesHidden) { - noteDb.pretendLoadingAll(student.studentId) - } else { - noteDb.loadAll(student.studentId) - } - }, + query = { noteDb.loadAll(student.studentId) }, fetch = { - val notesHidden = preferencesRepository - .selectedHiddenSettingTiles - .contains(DashboardItem.HiddenSettingTile.NOTES) + val showNotes = preferencesRepository.showNotes wulkanowySdkFactory.create(student, semester) .getNotes() - .filter { !notesHidden } + .filter { showNotes } .mapToEntities(semester) }, saveFetchResult = { old, new -> @@ -80,15 +68,7 @@ class NoteRepository @Inject constructor( ) fun getNotesFromDatabase(student: Student): Flow> { - val notesHidden = preferencesRepository - .selectedHiddenSettingTiles - .contains(DashboardItem.HiddenSettingTile.NOTES) - - return if (notesHidden) { - noteDb.pretendLoadingAll(student.studentId) - } else { - noteDb.loadAll(student.studentId) - } + return noteDb.loadAll(student.studentId) } suspend fun updateNote(note: Note) { diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/PreferencesRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/PreferencesRepository.kt index 91b2b7f4..4ba74ec0 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/PreferencesRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/PreferencesRepository.kt @@ -2,8 +2,6 @@ package io.github.wulkanowy.data.repositories import android.content.Context import android.content.SharedPreferences -import android.os.Build -import androidx.annotation.RequiresApi import androidx.annotation.StringRes import androidx.core.content.edit import com.fredporciuncula.flow.preferences.FlowSharedPreferences @@ -26,7 +24,7 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json -import okhttp3.internal.notifyAll +import timber.log.Timber import java.time.Instant import java.util.UUID import javax.inject.Inject @@ -39,6 +37,8 @@ class PreferencesRepository @Inject constructor( private val flowSharedPref: FlowSharedPreferences, private val json: Json, ) { + private val NO_ATTENDANCE_VALUE = -1.0 + val isShowPresent: Boolean get() = getBoolean( R.string.pref_key_attendance_present, @@ -297,28 +297,9 @@ class PreferencesRepository @Inject constructor( selectedDashboardTilesPreference.set(filteredValue) } - var selectedHiddenSettingTiles: List - get() = selectedHiddenSettingTilesPreference.get() - .map { DashboardItem.HiddenSettingTile.valueOf(it) } - set(value) { - val filteredValue = value - .map { it.name } - .toSet() - - selectedHiddenSettingTilesPreference.set(filteredValue) - } - - var attendancePercentage: Float? - get() = getString( - R.string.pref_key_attendance_percentage, - R.string.pref_default_attendance_percentage - ).let { if (it.isNullOrEmpty()) null else it.toFloat() } - set(value) = sharedPref.edit { - putString( - context.getString(R.string.pref_key_attendance_percentage), - value?.toString() ?: "-1" - ) - } + var attendancePercentage: Double? + get() = attendancePercentagePreference.get().takeIf { it != NO_ATTENDANCE_VALUE } + set(value) = attendancePercentagePreference.set(value ?: NO_ATTENDANCE_VALUE) var hiddenAttendanceItems: List get() = hiddenAttendanceItemsPreference.get().toList() @@ -328,6 +309,10 @@ class PreferencesRepository @Inject constructor( get() = hiddenGradesPreference.get().toList() set(value) = hiddenGradesPreference.set(value.toSet()) + var showNotes: Boolean + get() = showNotesPreference.get() + set(value) = showNotesPreference.set(value) + private val hiddenGradesPreference: Preference> get() { val defaultSet = context.resources.getStringArray(R.array.pref_default_hidden_grades).toSet() @@ -336,11 +321,17 @@ class PreferencesRepository @Inject constructor( return flowSharedPref.getStringSet(prefKey, defaultSet) } + private val showNotesPreference: Preference + get() = flowSharedPref.getBoolean( + context.getString(R.string.pref_key_show_notes), + context.resources.getBoolean(R.bool.pref_default_show_notes) + ) + private val hiddenAttendanceItemsPreference: Preference> get() { val defaultSet = context.resources.getStringArray(R.array.pref_default_hidden_attendance_items).toSet() - val prefKey = "hidden_attendance_items" + val prefKey = "attendance_items" return flowSharedPref .getStringSet(prefKey, defaultSet) @@ -359,21 +350,19 @@ class PreferencesRepository @Inject constructor( return flowSharedPref.getStringSet(prefKey, defaultSet) } - private val selectedHiddenSettingTilesPreference: Preference> + private val attendancePercentagePreference: Preference get() { - val defaultSet = - context.resources.getStringArray(R.array.pref_default_hidden_settings_tiles).toSet() - val prefKey = "hidden_settings_tiles" + val prefKey = context.getString(R.string.pref_key_attendance_percentage) + val defaultValue = context.resources.getString(R.string.pref_default_attendance_percentage) - return flowSharedPref.getStringSet(prefKey, defaultSet) + return flowSharedPref + .getString(prefKey, defaultValue) + .map( + mapper = { it.toDoubleOrNull() ?: NO_ATTENDANCE_VALUE }, + reverse = { it.toString() } + ) } - private val attendancePercentagePreference: Preference - get() = flowSharedPref.getFloat( - context.getString(R.string.pref_key_attendance_percentage), - context.resources.getInteger(R.integer.pref_default_attendance_percentage).toFloat() - ) - var dismissedAdminMessageIds: List get() = sharedPref.getStringSet(PREF_KEY_ADMIN_DISMISSED_MESSAGE_IDS, emptySet()) .orEmpty() diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/summary/AttendanceSummaryAdapter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/summary/AttendanceSummaryAdapter.kt index ae0a189f..4e9f68c9 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/summary/AttendanceSummaryAdapter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/summary/AttendanceSummaryAdapter.kt @@ -54,7 +54,7 @@ class AttendanceSummaryAdapter @Inject constructor( private fun bindHeaderViewHolder(binding: ScrollableHeaderAttendanceSummaryBinding) { binding.attendanceSummaryScrollableHeaderPercentage.text = formatPercentage( - attendancePercentage?.toDouble() ?: + attendancePercentage ?: items.calculatePercentage() ) } @@ -68,8 +68,8 @@ class AttendanceSummaryAdapter @Inject constructor( else -> item.month.getFormattedName() } attendanceSummaryPercentage.text = when (position) { - -1 -> formatPercentage(attendancePercentage?.toDouble() ?: item.calculatePercentage()) - else -> formatPercentage(attendancePercentage?.toDouble() ?: item.calculatePercentage()) + -1 -> formatPercentage(attendancePercentage ?: item.calculatePercentage()) + else -> formatPercentage(attendancePercentage ?: item.calculatePercentage()) } attendanceSummaryPresent.text = item.presence.toString() diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardItem.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardItem.kt index 45e11ad4..506f6124 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardItem.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardItem.kt @@ -148,12 +148,6 @@ sealed class DashboardItem(val type: Type) { CONFERENCES, } - enum class HiddenSettingTile { - BAD_ATTENDANCE, - NOTES, - ATTENDANCE, - } - enum class HiddenAttendanceTile { UNEXCUSED_ABSENCE, EXEMPTION, diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardPresenter.kt index 5a18683a..9ba71937 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardPresenter.kt @@ -338,7 +338,7 @@ class DashboardPresenter @Inject constructor( } else null }, attendancePercentage = DashboardItem.HorizontalGroup.Cell( - data = attendancePercentage?.toDouble() ?: attendanceResource.dataOrNull?.calculatePercentage(), + data = attendancePercentage ?: attendanceResource.dataOrNull?.calculatePercentage(), error = attendanceResource.errorOrNull != null, isLoading = attendanceResource is Resource.Loading, ), diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/note/NotePresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/note/NotePresenter.kt index 62ad347f..59a13fbb 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/note/NotePresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/note/NotePresenter.kt @@ -3,6 +3,7 @@ package io.github.wulkanowy.ui.modules.note import io.github.wulkanowy.data.* import io.github.wulkanowy.data.db.entities.Note import io.github.wulkanowy.data.repositories.NoteRepository +import io.github.wulkanowy.data.repositories.PreferencesRepository import io.github.wulkanowy.data.repositories.SemesterRepository import io.github.wulkanowy.data.repositories.StudentRepository import io.github.wulkanowy.ui.base.BasePresenter @@ -17,6 +18,7 @@ class NotePresenter @Inject constructor( studentRepository: StudentRepository, private val noteRepository: NoteRepository, private val semesterRepository: SemesterRepository, + private val preferencesRepository: PreferencesRepository, private val analytics: AnalyticsHelper ) : BasePresenter(errorHandler, studentRepository) { @@ -48,6 +50,19 @@ class NotePresenter @Inject constructor( } private fun loadData(forceRefresh: Boolean = false) { + if (!preferencesRepository.showNotes) { + view?.run { + enableSwipe(false) + showEmpty(false) + showContent(false) + showErrorView(false) + showProgress(false) + showEmpty(true) + } + + return + } + flatResourceFlow { val student = studentRepository.getCurrentStudent() val semester = semesterRepository.getCurrentSemester(student) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/settings/mod_settings/ModSettingsFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/settings/mod_settings/ModSettingsFragment.kt index 4b98eff0..75667219 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/settings/mod_settings/ModSettingsFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/settings/mod_settings/ModSettingsFragment.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.View import androidx.appcompat.app.AlertDialog import androidx.preference.EditTextPreference +import androidx.preference.MultiSelectListPreference import androidx.preference.PreferenceFragmentCompat import com.google.android.material.dialog.MaterialAlertDialogBuilder import dagger.hilt.android.AndroidEntryPoint @@ -43,8 +44,8 @@ class ModSettingsFragment : PreferenceFragmentCompat(), override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.scheme_preferences_mod_settings, rootKey) - val etp: EditTextPreference? = findPreference("attendance_percentage") - etp?.setOnBindEditTextListener { editText -> + val attendancePercentagePreference: EditTextPreference? = findPreference("attendance_percentage") + attendancePercentagePreference?.setOnBindEditTextListener { editText -> editText.inputType = android.text.InputType.TYPE_CLASS_NUMBER or android.text.InputType.TYPE_NUMBER_FLAG_DECIMAL editText.filters = arrayOf( android.text.InputFilter { source, _, _, dest, _, _ -> @@ -118,25 +119,6 @@ class ModSettingsFragment : PreferenceFragmentCompat(), preferenceScreen.sharedPreferences?.unregisterOnSharedPreferenceChangeListener(this) } - override fun showGradeDialogSettings() { - 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_hidden_grades) - .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 showAttendanceSettings(items: List) { val entries = requireContext().resources.getStringArray(R.array.mod_settings_attendance_entries) val values = requireContext().resources.getStringArray(R.array.mod_settings_attendance_values) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/settings/mod_settings/ModSettingsPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/settings/mod_settings/ModSettingsPresenter.kt index 1f81732f..10bbefbc 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/settings/mod_settings/ModSettingsPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/settings/mod_settings/ModSettingsPresenter.kt @@ -18,6 +18,7 @@ class ModSettingsPresenter @Inject constructor( override fun onAttachView(view: ModSettingsView) { super.onAttachView(view) + Timber.i("Mod settings view was initialized") } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/settings/mod_settings/ModSettingsView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/settings/mod_settings/ModSettingsView.kt index 115a551e..0133d2a4 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/settings/mod_settings/ModSettingsView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/settings/mod_settings/ModSettingsView.kt @@ -5,6 +5,5 @@ import io.github.wulkanowy.ui.modules.dashboard.DashboardItem interface ModSettingsView : BaseView { fun restartApp() - fun showGradeDialogSettings() fun showAttendanceSettings(items: List) } diff --git a/app/src/main/res/values-cs/mod_values.xml b/app/src/main/res/values-cs/mod_values.xml index 62229dde..8ff9f93b 100644 --- a/app/src/main/res/values-cs/mod_values.xml +++ b/app/src/main/res/values-cs/mod_values.xml @@ -3,10 +3,4 @@ Skrytá nastavení Procento docházky Skrýt známky - - - Špatná účast - Poznámky - Falešná účast - diff --git a/app/src/main/res/values-da-rDK/mod_values.xml b/app/src/main/res/values-da-rDK/mod_values.xml index af223cdb..f648b1e7 100644 --- a/app/src/main/res/values-da-rDK/mod_values.xml +++ b/app/src/main/res/values-da-rDK/mod_values.xml @@ -3,10 +3,4 @@ Hidden settings Attendance percentage Hide grades - - - Bad attendance - Notes - Fake attendance - diff --git a/app/src/main/res/values-de/mod_values.xml b/app/src/main/res/values-de/mod_values.xml index 3e56dc5d..186d27c3 100644 --- a/app/src/main/res/values-de/mod_values.xml +++ b/app/src/main/res/values-de/mod_values.xml @@ -3,10 +3,4 @@ Geheime Einstellungen Prozentuale Erwartung Hide Grades - - - Schlechte Anwesenheit - Notizen - Vorgetäuschte 100-prozentige Anwesenheit - diff --git a/app/src/main/res/values-es-rES/mod_values.xml b/app/src/main/res/values-es-rES/mod_values.xml index af223cdb..f648b1e7 100644 --- a/app/src/main/res/values-es-rES/mod_values.xml +++ b/app/src/main/res/values-es-rES/mod_values.xml @@ -3,10 +3,4 @@ Hidden settings Attendance percentage Hide grades - - - Bad attendance - Notes - Fake attendance - diff --git a/app/src/main/res/values-it-rIT/mod_values.xml b/app/src/main/res/values-it-rIT/mod_values.xml index af223cdb..f648b1e7 100644 --- a/app/src/main/res/values-it-rIT/mod_values.xml +++ b/app/src/main/res/values-it-rIT/mod_values.xml @@ -3,10 +3,4 @@ Hidden settings Attendance percentage Hide grades - - - Bad attendance - Notes - Fake attendance - diff --git a/app/src/main/res/values-pl/mod_values.xml b/app/src/main/res/values-pl/mod_values.xml index c2a4688e..cded3a4a 100644 --- a/app/src/main/res/values-pl/mod_values.xml +++ b/app/src/main/res/values-pl/mod_values.xml @@ -3,10 +3,4 @@ Sekretne ustawienia Procent frekwencji Ukryj oceny - - - Słaba frekwencja - Uwagi - Fałszywa frekwencja - diff --git a/app/src/main/res/values-ru/mod_values.xml b/app/src/main/res/values-ru/mod_values.xml index 8e64ef8b..a41674fb 100644 --- a/app/src/main/res/values-ru/mod_values.xml +++ b/app/src/main/res/values-ru/mod_values.xml @@ -3,10 +3,4 @@ Секретные настройки Процент посещаемости Скрыть оценки - - - Плохая посещаемость - Примечания - Фейковая посещаемость - diff --git a/app/src/main/res/values-sk/mod_values.xml b/app/src/main/res/values-sk/mod_values.xml index f7d6c3d8..c3903d75 100644 --- a/app/src/main/res/values-sk/mod_values.xml +++ b/app/src/main/res/values-sk/mod_values.xml @@ -3,10 +3,4 @@ Skryté nastavenia Percento dochádzky Skryť známky - - - Zlá účasť - Poznámky - Falošná účasť - diff --git a/app/src/main/res/values-uk/mod_values.xml b/app/src/main/res/values-uk/mod_values.xml index 57b726ba..962720e2 100644 --- a/app/src/main/res/values-uk/mod_values.xml +++ b/app/src/main/res/values-uk/mod_values.xml @@ -3,10 +3,4 @@ Секретні налаштування Відсоток відвідуваності Приховати оцінки - - - Погана відвідуваність - Примітки - Фальшива явка - diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml deleted file mode 100644 index a1c270e6..00000000 --- a/app/src/main/res/values/integers.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - -1 - diff --git a/app/src/main/res/values/mod_values.xml b/app/src/main/res/values/mod_values.xml index acf84529..4528dea0 100644 --- a/app/src/main/res/values/mod_values.xml +++ b/app/src/main/res/values/mod_values.xml @@ -5,11 +5,14 @@ Attendance percentage Hidden grades + hidden_grades attendance_items attendance_percentage - + -1 - + Show notes + show_notes + true Unexcused absence @@ -37,17 +40,6 @@ - - Bad attendance - Notes - Fake attendance - - - BAD_ATTENDANCE - NOTES - ATTENDANCE - - 1 1+ diff --git a/app/src/main/res/xml/scheme_preferences_mod_settings.xml b/app/src/main/res/xml/scheme_preferences_mod_settings.xml index d61364be..4deb55dd 100644 --- a/app/src/main/res/xml/scheme_preferences_mod_settings.xml +++ b/app/src/main/res/xml/scheme_preferences_mod_settings.xml @@ -21,45 +21,25 @@ app:title="@string/pref_mod_settings_hidden_attendance_items" app:useSimpleSummaryProvider="true" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + +