diff --git a/app/src/main/java/com/denizk0461/studip/data/Misc.kt b/app/src/main/java/com/denizk0461/studip/data/Misc.kt index 81797e7..2aeea6b 100644 --- a/app/src/main/java/com/denizk0461/studip/data/Misc.kt +++ b/app/src/main/java/com/denizk0461/studip/data/Misc.kt @@ -1,7 +1,9 @@ package com.denizk0461.studip.data +import android.content.Context import android.content.res.Resources import android.util.TypedValue +import android.widget.Toast import androidx.annotation.AttrRes import com.denizk0461.studip.R @@ -30,24 +32,52 @@ fun Resources.Theme.getThemedColor(@AttrRes id: Int): Int = TypedValue().also { resolveAttribute(id, value, true) }.data -object Misc { +/** + * Present the user with a toast. + * + * @param text text to display + */ +fun showToast(context: Context, text: String) { + Toast.makeText(context, text, Toast.LENGTH_SHORT).show() +} -// private val timeslotAcademicQuarter = mapOf( -// "6:00" to "6:15", -// "8:00" to "7:45", -// "8:00" to "8:15", -// "10:00" to "9:45", -// "10:00" to "10:15", -// "12:00" to "11:45", -// "12:00" to "12:15", -// "14:00" to "13:45", -// "14:00" to "14:15", -// "16:00" to "15:45", -// "16:00" to "16:15", -// "18:00" to "17:45", -// "18:00" to "18:15", -// "20:00" to "19:45", -// "20:00" to "20:15", -// "22:00" to "21:45", -// ) -} \ No newline at end of file +/** + * Provides a conversion method between a timestamp ending in a full hour, and one with an academic + * quarter applied. + */ +val timeslotsAcademicQuarter = listOf( + "4:00", + "6:00", + "8:00", + "10:00", + "12:00", + "14:00", + "16:00", + "18:00", + "20:00", + "22:00", +) + +val timeslotsAcademicQuarterStart = mapOf( + "4:00" to "4:15", + "6:00" to "6:15", + "8:00" to "8:15", + "10:00" to "10:15", + "12:00" to "12:15", + "14:00" to "14:15", + "16:00" to "16:15", + "18:00" to "18:15", + "20:00" to "20:15", +) + +val timeslotsAcademicQuarterEnd = mapOf( + "6:00" to "5:45", + "8:00" to "7:45", + "10:00" to "9:45", + "12:00" to "11:45", + "14:00" to "13:45", + "16:00" to "15:45", + "18:00" to "17:45", + "20:00" to "19:45", + "22:00" to "21:45", +) \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/studip/db/AppRepository.kt b/app/src/main/java/com/denizk0461/studip/db/AppRepository.kt index 1b371da..30e593e 100644 --- a/app/src/main/java/com/denizk0461/studip/db/AppRepository.kt +++ b/app/src/main/java/com/denizk0461/studip/db/AppRepository.kt @@ -197,7 +197,8 @@ class AppRepository(app: Application) { * @param pref preference to retrieve * @return whether the user set this preference */ - fun getBooleanPreference(pref: SettingsPreferences): Boolean = prefs.getBoolean(pref.key, false) + fun getBooleanPreference(pref: SettingsPreferences, defaultValue: Boolean = false): Boolean = + prefs.getBoolean(pref.key, defaultValue) /** * Retrieves ta user-set integer preference. diff --git a/app/src/main/java/com/denizk0461/studip/sheet/DevCodeSheet.kt b/app/src/main/java/com/denizk0461/studip/sheet/DevCodeSheet.kt index b2a3f5c..77ea14b 100644 --- a/app/src/main/java/com/denizk0461/studip/sheet/DevCodeSheet.kt +++ b/app/src/main/java/com/denizk0461/studip/sheet/DevCodeSheet.kt @@ -7,6 +7,7 @@ import android.util.Base64 import android.view.View import android.widget.Toast import com.denizk0461.studip.R +import com.denizk0461.studip.data.showToast import com.denizk0461.studip.data.viewBinding import com.denizk0461.studip.databinding.SheetDevCodeBinding import java.nio.charset.StandardCharsets @@ -60,43 +61,34 @@ class DevCodeSheet( "QkJVT0s/".d() -> launchLink("aHR0cHM6Ly95b3V0dS5iZS90Rm1PMm1TY0tHNA==".d()) "NEVENT" -> { // nuke events nukeEvents() - showToast("Nuked all events") + showToast(context, "Nuked all events") } "NCANTE" -> { // nuke canteens nukeOfferCanteens() - showToast("Nuked all canteens") + showToast(context, "Nuked all canteens") } "NDATES" -> { // nuke dates nukeOfferDates() - showToast("Nuked all dates") + showToast(context, "Nuked all dates") } "NCATEG" -> { // nuke categories nukeOfferCategories() - showToast("Nuked all categories") + showToast(context, "Nuked all categories") } "NITEMS" -> { // nuke items nukeOfferItems() - showToast("Nuked all items") + showToast(context, "Nuked all items") } "NEVERY" -> { // nuke everything nukeEverything() - showToast("Nuked everything") + showToast(context, "Nuked everything") } - else -> showToast("code is invalid") + else -> showToast(context, "code is invalid") } dismiss() } } - /** - * Present the user with a toast. - * - * @param text text to display - */ - private fun showToast(text: String) { - Toast.makeText(context, text, Toast.LENGTH_SHORT).show() - } - /** * Launches a web link. * @@ -104,7 +96,7 @@ class DevCodeSheet( */ private fun launchLink(link: String) { // Let the user know they accomplished something with their life - showToast("✨") + showToast(context, "✨") // Give the user a slight dopamine boost startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(link))) diff --git a/app/src/main/java/com/denizk0461/studip/sheet/ScheduleUpdateSheet.kt b/app/src/main/java/com/denizk0461/studip/sheet/ScheduleUpdateSheet.kt index 9d69f09..e459d64 100644 --- a/app/src/main/java/com/denizk0461/studip/sheet/ScheduleUpdateSheet.kt +++ b/app/src/main/java/com/denizk0461/studip/sheet/ScheduleUpdateSheet.kt @@ -1,11 +1,17 @@ package com.denizk0461.studip.sheet import android.os.Bundle +import android.os.Handler import android.util.Log import android.view.View import androidx.fragment.app.FragmentActivity +import androidx.transition.TransitionManager import com.denizk0461.studip.R import com.denizk0461.studip.data.parseToMinutes +import com.denizk0461.studip.data.showToast +import com.denizk0461.studip.data.timeslotsAcademicQuarter +import com.denizk0461.studip.data.timeslotsAcademicQuarterEnd +import com.denizk0461.studip.data.timeslotsAcademicQuarterStart import com.denizk0461.studip.data.viewBinding import com.denizk0461.studip.databinding.SheetScheduleUpdateBinding import com.denizk0461.studip.dialog.TimePickerFragment @@ -40,6 +46,34 @@ class ScheduleUpdateSheet( binding.editTextLecturers.setText(event.lecturer) binding.editTextRoom.setText(event.room) + // Show academic quarter suggestion if it is applicable + binding.buttonAcademicQuarter.visibility = if ( + timeslotsAcademicQuarter.contains(timeslotStart) && + timeslotsAcademicQuarter.contains(timeslotEnd) + ) { + binding.buttonAcademicQuarter.setOnClickListener { + try { + val newStart = timeslotsAcademicQuarterStart[timeslotStart] + ?: throw NullPointerException() + val newEnd = timeslotsAcademicQuarterEnd[timeslotEnd] + ?: throw NullPointerException() + + timeslotStart = newStart + binding.buttonTimeStart.text = newStart + timeslotEnd = newEnd + binding.buttonTimeEnd.text = newEnd + + TransitionManager.beginDelayedTransition(binding.sheet) + binding.buttonAcademicQuarter.visibility = View.GONE + } catch (e: NullPointerException) { + showToast(context, getString(R.string.sheet_schedule_update_hint_quarter_error)) + } + } + View.VISIBLE + } else { + View.GONE + } + // Prepare timestamp buttons binding.buttonTimeStart.text = timeslotStart binding.buttonTimeStart.setOnClickListener { diff --git a/app/src/main/java/com/denizk0461/studip/viewmodel/CanteenViewModel.kt b/app/src/main/java/com/denizk0461/studip/viewmodel/CanteenViewModel.kt index e3d23ad..f617da4 100644 --- a/app/src/main/java/com/denizk0461/studip/viewmodel/CanteenViewModel.kt +++ b/app/src/main/java/com/denizk0461/studip/viewmodel/CanteenViewModel.kt @@ -70,7 +70,7 @@ class CanteenViewModel(app: Application) : AppViewModel(app) { * This value determines whether the user wants to have allergens marked. */ val preferenceAllergen: Boolean - get() = repo.getBooleanPreference(SettingsPreferences.ALLERGEN) + get() = repo.getBooleanPreference(SettingsPreferences.ALLERGEN, defaultValue = true) var preferenceCanteen: Int get() = repo.getIntPreference(SettingsPreferences.CANTEEN) diff --git a/app/src/main/java/com/denizk0461/studip/viewmodel/SettingsViewModel.kt b/app/src/main/java/com/denizk0461/studip/viewmodel/SettingsViewModel.kt index 24caf91..e47779a 100644 --- a/app/src/main/java/com/denizk0461/studip/viewmodel/SettingsViewModel.kt +++ b/app/src/main/java/com/denizk0461/studip/viewmodel/SettingsViewModel.kt @@ -60,7 +60,7 @@ class SettingsViewModel(app: Application) : AppViewModel(app) { * This value determines whether the user wants to have allergens marked. */ var preferenceAllergen: Boolean - get() = repo.getBooleanPreference(SettingsPreferences.ALLERGEN) + get() = repo.getBooleanPreference(SettingsPreferences.ALLERGEN, defaultValue = true) set(newValue) { repo.setPreference(SettingsPreferences.ALLERGEN, newValue) } /** diff --git a/app/src/main/res/drawable/lightbulb.xml b/app/src/main/res/drawable/lightbulb.xml new file mode 100644 index 0000000..1a19e7c --- /dev/null +++ b/app/src/main/res/drawable/lightbulb.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/font/ibm_regular.ttf b/app/src/main/res/font/ibm_regular.ttf new file mode 100644 index 0000000..02d682c Binary files /dev/null and b/app/src/main/res/font/ibm_regular.ttf differ diff --git a/app/src/main/res/layout/sheet_dev_code.xml b/app/src/main/res/layout/sheet_dev_code.xml index 8e9f91d..ee19ef7 100644 --- a/app/src/main/res/layout/sheet_dev_code.xml +++ b/app/src/main/res/layout/sheet_dev_code.xml @@ -35,7 +35,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" - android:fontFamily="serif-monospace" + android:fontFamily="@font/ibm_regular" android:inputType="textNoSuggestions" android:textSize="24sp"/> diff --git a/app/src/main/res/layout/sheet_schedule_update.xml b/app/src/main/res/layout/sheet_schedule_update.xml index 2bdcb28..3d5b767 100644 --- a/app/src/main/res/layout/sheet_schedule_update.xml +++ b/app/src/main/res/layout/sheet_schedule_update.xml @@ -1,5 +1,6 @@ + + + android:gravity="end" + android:layout_marginBottom="8dp"> Veranstaltungstitel Dozierende(r) Raum + Auf akademisches Viertel umstellen + Sorry, ein Fehler ist aufgetreten! Kein Angebot Für diesen Tag sind keine Angebote vorhanden diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 81c45cf..aff62c3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -20,6 +20,8 @@ Lecturer(s) Room + Change to academic quarter + Sorry, an error occurred! No offers There are no offers available for this day