diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
deleted file mode 100644
index 88b09f6..0000000
--- a/.idea/deploymentTargetDropDown.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/denizk0461/weserplaner/db/AppDAO.kt b/app/src/main/java/com/denizk0461/weserplaner/db/AppDAO.kt
index 4826054..ebce78c 100644
--- a/app/src/main/java/com/denizk0461/weserplaner/db/AppDAO.kt
+++ b/app/src/main/java/com/denizk0461/weserplaner/db/AppDAO.kt
@@ -87,6 +87,9 @@ interface AppDAO {
@Query("SELECT * FROM timetables ORDER BY id")
fun getTimetables(): LiveData>
+ @Query("SELECT COUNT(*) FROM timetables")
+ fun getTimetableCount(): Int
+
@Query("SELECT * FROM timetables WHERE id = :id LIMIT 1")
fun getTimetableForId(id: Int): Timetable
diff --git a/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt b/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt
index fb085a2..ac31b36 100644
--- a/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt
+++ b/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt
@@ -178,6 +178,8 @@ class AppRepository(app: Application) {
fun getTimetables(): LiveData> = dao.getTimetables()
+ fun getTimetableCount(): Int = dao.getTimetableCount()
+
fun getTimetableForId(id: Int): Timetable = dao.getTimetableForId(id)
fun deleteTimetable(id: Int) {
diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/EventFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/EventFragment.kt
index 0b6b000..3390832 100644
--- a/app/src/main/java/com/denizk0461/weserplaner/fragment/EventFragment.kt
+++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/EventFragment.kt
@@ -13,6 +13,7 @@ import com.denizk0461.weserplaner.activity.FetcherActivity
import com.denizk0461.weserplaner.activity.TimetableOverviewActivity
import com.denizk0461.weserplaner.adapter.StudIPEventPageAdapter
import com.denizk0461.weserplaner.data.getTextSheet
+import com.denizk0461.weserplaner.data.showErrorSnackBar
import com.denizk0461.weserplaner.data.showSnackBar
import com.denizk0461.weserplaner.databinding.FragmentEventBinding
import com.denizk0461.weserplaner.sheet.ScheduleUpdateSheet
@@ -35,6 +36,9 @@ class EventFragment : AppFragment() {
// Titles for the view pager's tabs
private lateinit var weekdays: Array
+ // Name of the currently selected schedule
+ private lateinit var timetableName: String
+
// Instantiate the view binding
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentEventBinding.inflate(inflater, container, false)
@@ -118,9 +122,9 @@ class EventFragment : AppFragment() {
// Set visibility of the fetch button depending on whether any events have been stored
viewModel.getEventCount().observe(viewLifecycleOwner) { eventCount ->
- val timetableName = viewModel.getSelectedTimetableName()
+ timetableName = viewModel.getSelectedTimetableName()
if (timetableName.isNotBlank()) {
- binding.appTitleBar.text = timetableName
+ binding.appTitleBar.text = getString(R.string.title_schedule_placeholder, timetableName)
}
binding.buttonFetchSchedule.visibility = if (eventCount == 0) {
@@ -132,6 +136,14 @@ class EventFragment : AppFragment() {
// Set up button for adding a new event
binding.fabAddEvent.setOnClickListener {
+
+ if (viewModel.getTimetableCount() == 0) {
+ context.theme.showErrorSnackBar(
+ binding.coordinatorLayout,
+ getString(R.string.sheet_schedule_update_no_timetable),
+ )
+ return@setOnClickListener
+ }
/*
* Open the bottom sheet used for editing an event, but tell the sheet that it will be
* used for creating a new event instead.
diff --git a/app/src/main/java/com/denizk0461/weserplaner/sheet/ScheduleUpdateSheet.kt b/app/src/main/java/com/denizk0461/weserplaner/sheet/ScheduleUpdateSheet.kt
index aa0479a..d3c543c 100644
--- a/app/src/main/java/com/denizk0461/weserplaner/sheet/ScheduleUpdateSheet.kt
+++ b/app/src/main/java/com/denizk0461/weserplaner/sheet/ScheduleUpdateSheet.kt
@@ -171,7 +171,7 @@ class ScheduleUpdateSheet : AppSheet(R.layout.sheet_schedule_update) {
viewModel.insert(
// construct new StudIPEvent from the data the user may have edited
StudIPEvent(
- timetableId = 0, // TODO current timetable
+ timetableId = viewModel.getCurrentTimetableId(),
title = binding.editTextTitle.text.toString().trim(),
lecturer = binding.editTextLecturers.text.toString().trim(),
room = binding.editTextRoom.text.toString().trim(),
diff --git a/app/src/main/java/com/denizk0461/weserplaner/sheet/TimetableAddSheet.kt b/app/src/main/java/com/denizk0461/weserplaner/sheet/TimetableAddSheet.kt
index 488ba07..9427101 100644
--- a/app/src/main/java/com/denizk0461/weserplaner/sheet/TimetableAddSheet.kt
+++ b/app/src/main/java/com/denizk0461/weserplaner/sheet/TimetableAddSheet.kt
@@ -2,6 +2,7 @@ package com.denizk0461.weserplaner.sheet
import android.os.Bundle
import android.view.View
+import androidx.core.widget.addTextChangedListener
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.NavHostFragment
import com.denizk0461.weserplaner.R
@@ -38,6 +39,16 @@ class TimetableAddSheet : AppSheet(R.layout.sheet_timetable_add) {
}
binding.buttonSave.setOnClickListener {
+
+ if (binding.editTextTitle.text.toString().isBlank()) {
+ // Set an error on the title field
+ binding.textLayoutTitle.error =
+ getString(R.string.sheet_schedule_update_text_field_empty_error)
+
+ // action must not be executed
+ return@setOnClickListener
+ }
+
viewModel.insertTimetable(Timetable(name = binding.editTextTitle.text.toString().trim()))
// Tell the user that the event has been updated
@@ -47,5 +58,9 @@ class TimetableAddSheet : AppSheet(R.layout.sheet_timetable_add) {
dismiss()
}
+
+ binding.editTextTitle.addTextChangedListener {
+ binding.textLayoutTitle.error = null
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/EventViewModel.kt b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/EventViewModel.kt
index f3c98a3..b81599a 100644
--- a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/EventViewModel.kt
+++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/EventViewModel.kt
@@ -26,6 +26,8 @@ class EventViewModel(private val app: Application) : AppViewModel(app) {
}
}
+ fun getTimetableCount(): Int = returnBlocking { repo.getTimetableCount() }
+
/**
* This value determines whether the user wants their timetable to launch with the current day.
*/
diff --git a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/ScheduleUpdateViewModel.kt b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/ScheduleUpdateViewModel.kt
index 54a132c..a6a36bc 100644
--- a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/ScheduleUpdateViewModel.kt
+++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/ScheduleUpdateViewModel.kt
@@ -18,4 +18,6 @@ class ScheduleUpdateViewModel(application: Application) : AppViewModel(applicati
* @param event the event to update
*/
fun update(event: StudIPEvent) { doAsync { repo.update(event) } }
+
+ fun getCurrentTimetableId(): Int = repo.getPreferenceSelectedTimetable()
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/sheet_allergen.xml b/app/src/main/res/layout/sheet_allergen.xml
index a3f7d82..1806614 100644
--- a/app/src/main/res/layout/sheet_allergen.xml
+++ b/app/src/main/res/layout/sheet_allergen.xml
@@ -1,6 +1,7 @@
+ android:layout_marginBottom="2dp"
+ tools:text="Some kind of meal with extras I guess"/>
+ android:paddingHorizontal="24dp"
+ tools:text="[Category]"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
Veranstaltung wurde aktualisiert.
Bestehende Veranstaltung bearbeiten
Neue Veranstaltung hinzufügen
+ Stundenplan: %s
Veranstaltungstitel
Dozierende*r
Raum
+ Du musst einen Stundenplan erstellen, bevor du Veranstaltungen hinzufügst!
Auf akademisches Viertel umstellen
Sorry, ein Fehler ist aufgetreten!
Der Kurs kann nicht enden bevor er aufhört.
@@ -145,6 +147,7 @@
Dein Stundenplan
Stundenplan
+ Stundenplan: %s
Aufgaben & Prüfungen
Aufgaben
Mensenangebote
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c73042a..e33d77c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -32,7 +32,7 @@
Continue to the app
App settings
- Timetable
+ Schedule
Refresh offers
All offers
Today\'s events
@@ -67,9 +67,9 @@
Show help
Schedule
Go to your schedule
- How to save your timetable in the app
- • Log in with your Stud.IP login\n • Open your timetable view, in case it doesn\'t open automatically, by clicking the rightmost icon in the bottom bar that looks like a pencil and a ruler\n • Click the \'save\' button that appears in the bottom right corner\n • Done!
- Save the timetable in the app
+ How to save your schedule in the app
+ • Log in with your Stud.IP login\n • Open your schedule view, in case it doesn\'t open automatically, by clicking the rightmost icon in the bottom bar that looks like a pencil and a ruler\n • Click the \'save\' button that appears in the bottom right corner\n • Done!
+ Save the schedule in the app
View full schedule
New event
@@ -95,10 +95,12 @@
Event has been updated.
Edit existing event
Add new event
+ Schedule: %s
Event title
Lecturer(s)
Room
–
+ You must create a schedule before you add events!
Change to academic quarter
Sorry, an error occurred!
The course cannot end before it begins.
@@ -148,6 +150,7 @@
Your Schedule
Schedule
+ Schedule: %s
Tasks & Exams
Tasks
Canteen Offers
@@ -243,7 +246,7 @@
Settings
Heads up, new feature!
- As the new semester will start in a couple of weeks, you can prepare in advance by adding your new timetable! You can now add as many timetables to the app as you like.\n\nHead into the settings to find the new \'timetables\' option!
+ As the new semester will start in a couple of weeks, you can prepare in advance by adding your new schedule! You can now add as many schedules to the app as you like.\n\nHead into the settings to find the new \'schedules\' option!
General
Stud.IP Schedule
@@ -254,22 +257,22 @@
Refresh your Stud.IP schedule
This will clear any customisations!
- Select which timetable to display
- Timetable
- Edit timetable
- Timetable name
+ Select which schedule to display
+ Schedule
+ Edit schedule
+ Schedule name
Add
Edit
- Edit this timetable
- Add a new timetable
- There is no timetable to edit!
- Timetable has been updated.
- Timetable has been added.
- Timetable has been deleted.
+ Edit this schedule
+ Add a new schedule
+ There is no schedule to edit!
+ Schedule has been updated.
+ Schedule has been added.
+ Schedule has been deleted.
Sure?
- Hint: if you download a timetable from Stud.IP, it automatically gets added as a new timetable, so you won\'t need to do anything here!
+ Hint: if you download a schedule from Stud.IP, it automatically gets added as a new schedule, so you won\'t need to do anything here!
- Launch timetable on current day
+ Launch schedule on current day
If unselected, Monday will be shown on launch instead
Highlight next course