diff --git a/app/src/main/java/com/denizk0461/weserplaner/data/StudIPParser.kt b/app/src/main/java/com/denizk0461/weserplaner/data/StudIPParser.kt index 229d9f5..4e22b6d 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/data/StudIPParser.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/data/StudIPParser.kt @@ -2,7 +2,6 @@ package com.denizk0461.weserplaner.data import android.app.Application import com.denizk0461.weserplaner.db.AppRepository -import com.denizk0461.weserplaner.model.SettingsPreferences import com.denizk0461.weserplaner.model.StudIPEvent import org.jsoup.Jsoup import org.jsoup.nodes.Document @@ -110,9 +109,6 @@ class StudIPParser(application: Application) { // After fetching has finished, save the list of new items into persistent storage repo.insertEvents(newEvents) - // Set that the user has modified their schedule - repo.setPreference(SettingsPreferences.HAS_MODIFIED_SCHEDULE, true) - // Return the count of elements that were not able to be fetched return elementsNotFetched } 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 87a1c34..fb221b1 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/db/AppDAO.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/db/AppDAO.kt @@ -14,12 +14,12 @@ interface AppDAO { /* --- Stud.IP schedule events --- */ /** - * Retrieves all Stud.IP events, ordered by their timeslots, then their IDs. + * Retrieves the number of Stud.IP events available in the database. * - * @return all Stud.IP events exposed through a LiveData object + * @return number of Stud.IP events */ - @get:Query("SELECT * FROM studip_events ORDER BY timeslotId, eventId") - val allEvents: LiveData> + @Query("SELECT COUNT(*) FROM studip_events ORDER BY timeslotId, eventId") + fun getEventCount(): LiveData /** * Retrieves Stud.IP events for a specific day, ordered by their timeslots, then their IDs. 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 3b8cdcb..88a45c6 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt @@ -52,6 +52,13 @@ class AppRepository(app: Application) { } } + /** + * Retrieves the number of Stud.IP events available in the database. + * + * @return number of Stud.IP events + */ + fun getEventCount(): LiveData = dao.getEventCount() + /** * Retrieves Stud.IP events for a specific day, ordered by their timeslots, then their IDs. * 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 684a286..bbc3a28 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/EventFragment.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/EventFragment.kt @@ -5,7 +5,6 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.fragment.app.setFragmentResultListener import androidx.fragment.app.viewModels import com.denizk0461.weserplaner.R import com.denizk0461.weserplaner.activity.FetcherActivity @@ -87,12 +86,13 @@ class EventFragment : AppFragment() { startActivity(Intent(context, FetcherActivity::class.java)) } - /* - * Set the fetch button to be visible if the user has not previously modified their schedule - * in any way (added an event manually or used the Stud.IP fetcher). - */ - if (!viewModel.preferenceHasModifiedSchedule) { - binding.buttonFetchSchedule.visibility = View.VISIBLE + // Set visibility of the fetch button depending on whether any events have been stored + viewModel.getEventCount().observe(viewLifecycleOwner) { eventCount -> + binding.buttonFetchSchedule.visibility = if (eventCount == 0) { + View.VISIBLE + } else { + View.GONE + } } // Set up button for adding a new event @@ -106,26 +106,12 @@ class EventFragment : AppFragment() { val bundle = Bundle() bundle.putBoolean("isEditing", false) sheet.arguments = bundle - - /* - * Receive fragment result to update the button visibility. - * TODO doesn't work after configuration change (change into or out of multi - * window) - */ - setFragmentResultListener("eventAdded") { _, _ -> - // Hide the fetch button - binding.buttonFetchSchedule.visibility = View.GONE - } } ) } // Show the user a little message if they're opening the app for the first time if (viewModel.preferenceFirstLaunch) { - - // Show toast -// showToast(context, getString(R.string.toast_first_launch)) - // Remember that the app has been launched before viewModel.preferenceFirstLaunch = false } diff --git a/app/src/main/java/com/denizk0461/weserplaner/model/SettingsPreferences.kt b/app/src/main/java/com/denizk0461/weserplaner/model/SettingsPreferences.kt index 6c34441..bead8d2 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/model/SettingsPreferences.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/model/SettingsPreferences.kt @@ -63,10 +63,5 @@ enum class SettingsPreferences(val key: String) { * Whether the user has opened the canteen fragment before. */ HAS_OPENED_CANTEEN("has_opened_canteen"), - - /** - * Whether the user has done something to modify their schedule. - */ - HAS_MODIFIED_SCHEDULE("has_modified_schedule"), ; } \ No newline at end of file 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 97555d3..cd05e8f 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/sheet/ScheduleUpdateSheet.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/sheet/ScheduleUpdateSheet.kt @@ -5,7 +5,6 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.PopupMenu import androidx.core.widget.addTextChangedListener -import androidx.fragment.app.setFragmentResult import androidx.fragment.app.viewModels import androidx.transition.TransitionManager import com.denizk0461.weserplaner.R @@ -189,12 +188,6 @@ class ScheduleUpdateSheet : AppSheet(R.layout.sheet_schedule_update) { ) ) - /* - * Send an empty bundle to tell the parent fragment that it should update its view - * according to the changes made here. - */ - parentFragment?.setFragmentResult("eventAdded", Bundle()) - // Dismiss the sheet upon update dismiss() } 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 7041803..bd95445 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/EventViewModel.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/EventViewModel.kt @@ -1,6 +1,7 @@ package com.denizk0461.weserplaner.viewmodel import android.app.Application +import androidx.lifecycle.LiveData import com.denizk0461.weserplaner.model.SettingsPreferences /** @@ -10,6 +11,13 @@ import com.denizk0461.weserplaner.model.SettingsPreferences */ class EventViewModel(app: Application) : AppViewModel(app) { + /** + * Retrieves the number of Stud.IP events available in the database. + * + * @return number of Stud.IP events + */ + fun getEventCount(): LiveData = repo.getEventCount() + /** * This value determines whether the user wants their timetable to launch with the current day. */ @@ -28,10 +36,4 @@ class EventViewModel(app: Application) : AppViewModel(app) { defaultValue = true, ) set(value) { repo.setPreference(SettingsPreferences.FIRST_LAUNCH, value) } - - /** - * Determines whether the user has done something to modify their schedule. - */ - val preferenceHasModifiedSchedule: Boolean - get() = repo.getBooleanPreference(SettingsPreferences.HAS_MODIFIED_SCHEDULE) } \ No newline at end of file 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 4ea9a98..d1500a2 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/ScheduleUpdateViewModel.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/ScheduleUpdateViewModel.kt @@ -1,7 +1,6 @@ package com.denizk0461.weserplaner.viewmodel import android.app.Application -import com.denizk0461.weserplaner.model.SettingsPreferences import com.denizk0461.weserplaner.model.StudIPEvent class ScheduleUpdateViewModel(application: Application) : AppViewModel(application) { @@ -11,13 +10,7 @@ class ScheduleUpdateViewModel(application: Application) : AppViewModel(applicati * * @param event the event to save */ - fun insert(event: StudIPEvent) { - // Inser the event - doAsync { repo.insert(event) } - - // Set that the user has modified their schedule - repo.setPreference(SettingsPreferences.HAS_MODIFIED_SCHEDULE, true) - } + fun insert(event: StudIPEvent) { doAsync { repo.insert(event) } } /** * Updates a schedule element.