From ff930b89c0c8f96ec79f3317356a54b7e7d71463 Mon Sep 17 00:00:00 2001 From: denizk0461 Date: Sat, 20 May 2023 22:03:51 +0200 Subject: [PATCH] Added ExamOverviewFragment.kt and RoomFinderFragment.kt as well as respective layouts and view models to implement later; minor reformatting --- README.md | 2 ++ .../weserplaner/fragment/AppFragment.kt | 12 +++++++++- .../weserplaner/fragment/CanteenFragment.kt | 11 +-------- .../fragment/CanteenPageFragment.kt | 11 +-------- .../weserplaner/fragment/EventFragment.kt | 11 +-------- .../weserplaner/fragment/EventPageFragment.kt | 11 +-------- .../fragment/ExamOverviewFragment.kt | 24 +++++++++++++++++++ .../fragment/RoomFinderFragment.kt | 24 +++++++++++++++++++ .../weserplaner/fragment/SettingsFragment.kt | 11 +-------- .../viewmodel/ExamOverviewViewModel.kt | 11 +++++++++ .../viewmodel/RoomFinderViewModel.kt | 11 +++++++++ .../res/layout/fragment_exam_overview.xml | 6 +++++ .../main/res/layout/fragment_room_finder.xml | 6 +++++ app/src/main/res/layout/item_event.xml | 3 ++- app/src/main/res/layout/sheet_allergen.xml | 6 +---- .../main/res/layout/sheet_allergen_config.xml | 6 +---- .../main/res/layout/sheet_schedule_update.xml | 8 ++----- app/src/main/res/layout/sheet_text.xml | 8 ++----- app/src/main/res/values/themes.xml | 7 ++++++ 19 files changed, 115 insertions(+), 74 deletions(-) create mode 100644 app/src/main/java/com/denizk0461/weserplaner/fragment/ExamOverviewFragment.kt create mode 100644 app/src/main/java/com/denizk0461/weserplaner/fragment/RoomFinderFragment.kt create mode 100644 app/src/main/java/com/denizk0461/weserplaner/viewmodel/ExamOverviewViewModel.kt create mode 100644 app/src/main/java/com/denizk0461/weserplaner/viewmodel/RoomFinderViewModel.kt create mode 100644 app/src/main/res/layout/fragment_exam_overview.xml create mode 100644 app/src/main/res/layout/fragment_room_finder.xml diff --git a/README.md b/README.md index e76b9db..4d27713 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,8 @@ Currently, nothing is outright broken, but a few things may be bodged together b ## TODO - Adding exams, homework, etc.: users will be able to add any tasks they need to do as reminders. Those can be associated with events that either have been downloaded from the user's Stud.IP schedule, or ones the user has created manually. An overview will be provided that allows the user to have, well, an overview of everything they need to do. +- Finding your room: I'd like to add a feature that makes finding a specific room on the university's campus much easier than it is now. The university website does have a feature that, in theory, should do exactly that, but it works very poorly and does not list all rooms. My idea would be that the user could type in a room, the app could then make suggestions on which room the user may want to find based on the input, and then show the user a floor plan with the room highlighted. + - This could prove quite difficult though, as I do not have access to the university's proper floor plans. My best bet would be to either use the ones avalable online to create my own ones, or draw ones from scratch. As for finding all the rooms, I may have to walk around the university and find all rooms myself. - Optimisations to data handling will be made. The app currently only supports storing a single timetable, which will be changed in future releases. A planned implementation will see the user being able to download schedules as well as create ones from scratch, with the schedules able to be selected via a dropdown menu. - Some improvements to the Play Store screenshots are sorely needed... diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/AppFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/AppFragment.kt index f5b304f..5baa23a 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/AppFragment.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/AppFragment.kt @@ -2,17 +2,27 @@ package com.denizk0461.weserplaner.fragment import android.content.Context import androidx.fragment.app.Fragment +import androidx.viewbinding.ViewBinding import com.denizk0461.weserplaner.sheet.AppSheet /** * Fragment super class providing common functionality. Fragments are used for providing the user * with different views and functionality. All fragments should inherit from this. */ -open class AppFragment : Fragment() { +abstract class AppFragment : Fragment() { // Internal context object private lateinit var _context: Context + // Nullable view binding reference. Instantiate this in classes that extend this class. + protected var _binding: T? = null + + /* + * Non-null reference to the view binding. This property is only valid between onCreateView and + * onDestroyView. + */ + protected val binding: T get() = _binding!! + /** * Get non-null context. Only valid after onAttach(). */ diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenFragment.kt index 6d630ac..fadc728 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenFragment.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenFragment.kt @@ -25,16 +25,7 @@ import com.google.android.material.tabs.TabLayoutMediator * User-facing fragment view that displays the canteen offers from the website of the * Studierendenwerk Bremen. */ -class CanteenFragment : AppFragment() { - - // Nullable view binding reference - private var _binding: FragmentCanteenBinding? = null - - /* - * Non-null reference to the view binding. This property is only valid between onCreateView and - * onDestroyView. - */ - private val binding get() = _binding!! +class CanteenFragment : AppFragment() { // Adapter for the view pager displaying all offers private lateinit var viewPagerAdapter: CanteenOfferPageAdapter diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenPageFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenPageFragment.kt index 2b1081a..1428825 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenPageFragment.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenPageFragment.kt @@ -21,16 +21,7 @@ import com.denizk0461.weserplaner.viewmodel.CanteenPageViewModel * Fragment that is instantiated by [StudIPEventPageAdapter] to display individual days' pages and * their events. */ -class CanteenPageFragment : AppFragment(), CanteenOfferItemAdapter.OnClickListener { - - // Nullable view binding reference - private var _binding: RecyclerViewBinding? = null - - /* - * Non-null reference to the view binding. This property is only valid between onCreateView and - * onDestroyView. - */ - private val binding get() = _binding!! +class CanteenPageFragment : AppFragment(), CanteenOfferItemAdapter.OnClickListener { // View model reference for providing access to the database private val viewModel: CanteenPageViewModel by viewModels() 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 1284e5d..34d4d79 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/EventFragment.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/EventFragment.kt @@ -20,16 +20,7 @@ import java.util.* /** * User-facing fragment view that displays the user's Stud.IP schedule. */ -class EventFragment : AppFragment() { - - // Nullable view binding reference - private var _binding: FragmentEventBinding? = null - - /* - * Non-null reference to the view binding. This property is only valid between onCreateView and - * onDestroyView. - */ - private val binding get() = _binding!! +class EventFragment : AppFragment() { // Adapter for the view pager displaying all events private lateinit var viewPagerAdapter: StudIPEventPageAdapter diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/EventPageFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/EventPageFragment.kt index ffe258a..e738e55 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/EventPageFragment.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/EventPageFragment.kt @@ -18,16 +18,7 @@ import com.denizk0461.weserplaner.viewmodel.EventPageViewModel * Fragment that is instantiated by [StudIPEventPageAdapter] to display individual days' pages and * their events. */ -class EventPageFragment : AppFragment(), StudIPEventItemAdapter.OnClickListener { - - // Nullable view binding reference - private var _binding: RecyclerViewBinding? = null - - /* - * Non-null reference to the view binding. This property is only valid between onCreateView and - * onDestroyView. - */ - private val binding get() = _binding!! +class EventPageFragment : AppFragment(), StudIPEventItemAdapter.OnClickListener { // View model reference for providing access to the database private val viewModel: EventPageViewModel by viewModels() diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/ExamOverviewFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/ExamOverviewFragment.kt new file mode 100644 index 0000000..26101f5 --- /dev/null +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/ExamOverviewFragment.kt @@ -0,0 +1,24 @@ +package com.denizk0461.weserplaner.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.viewModels +import com.denizk0461.weserplaner.databinding.FragmentExamOverviewBinding +import com.denizk0461.weserplaner.viewmodel.ExamOverviewViewModel + +/** + * Fragment that shows the user an overview of their exams. + */ +class ExamOverviewFragment : AppFragment() { + + // View model reference for providing access to the database + private val viewModel: ExamOverviewViewModel by viewModels() + + // Instantiate the view binding + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentExamOverviewBinding.inflate(inflater, container, false) + return binding.root + } +} \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/RoomFinderFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/RoomFinderFragment.kt new file mode 100644 index 0000000..8993530 --- /dev/null +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/RoomFinderFragment.kt @@ -0,0 +1,24 @@ +package com.denizk0461.weserplaner.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.viewModels +import com.denizk0461.weserplaner.databinding.FragmentRoomFinderBinding +import com.denizk0461.weserplaner.viewmodel.RoomFinderViewModel + +/** + * Fragment view that the user can use to find specific rooms on the university campus. + */ +class RoomFinderFragment : AppFragment() { + + // View model reference for providing access to the database + private val viewModel: RoomFinderViewModel by viewModels() + + // Instantiate the view binding + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentRoomFinderBinding.inflate(inflater, container, false) + return binding.root + } +} \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/SettingsFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/SettingsFragment.kt index 3e80ee3..c329bda 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/SettingsFragment.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/SettingsFragment.kt @@ -29,16 +29,7 @@ import java.util.* /** * User-facing fragment view that is used to change app settings. */ -class SettingsFragment : AppFragment() { - - // Nullable view binding reference - private var _binding: FragmentSettingsBinding? = null - - /* - * Non-null reference to the view binding. This property is only valid between onCreateView and - * onDestroyView. - */ - private val binding get() = _binding!! +class SettingsFragment : AppFragment() { // View model reference for providing access to the database private val viewModel: SettingsViewModel by viewModels() diff --git a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/ExamOverviewViewModel.kt b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/ExamOverviewViewModel.kt new file mode 100644 index 0000000..789451c --- /dev/null +++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/ExamOverviewViewModel.kt @@ -0,0 +1,11 @@ +package com.denizk0461.weserplaner.viewmodel + +import android.app.Application + +/** + * View model class for [com.denizk0461.weserplaner.fragment.ExamOverviewFragment]. + */ +class ExamOverviewViewModel(application: Application) : AppViewModel(application) { + + +} \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/RoomFinderViewModel.kt b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/RoomFinderViewModel.kt new file mode 100644 index 0000000..3becd6e --- /dev/null +++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/RoomFinderViewModel.kt @@ -0,0 +1,11 @@ +package com.denizk0461.weserplaner.viewmodel + +import android.app.Application + +/** + * View model class for [com.denizk0461.weserplaner.fragment.RoomFinderFragment]. + */ +class RoomFinderViewModel(application: Application) : AppViewModel(application) { + + +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_exam_overview.xml b/app/src/main/res/layout/fragment_exam_overview.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_exam_overview.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_room_finder.xml b/app/src/main/res/layout/fragment_room_finder.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_room_finder.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_event.xml b/app/src/main/res/layout/item_event.xml index 98838b8..66bb879 100644 --- a/app/src/main/res/layout/item_event.xml +++ b/app/src/main/res/layout/item_event.xml @@ -1,5 +1,6 @@ - diff --git a/app/src/main/res/layout/sheet_allergen_config.xml b/app/src/main/res/layout/sheet_allergen_config.xml index c234892..5cf42f7 100644 --- a/app/src/main/res/layout/sheet_allergen_config.xml +++ b/app/src/main/res/layout/sheet_allergen_config.xml @@ -18,16 +18,12 @@ app:layout_constraintEnd_toEndOf="parent"/> diff --git a/app/src/main/res/layout/sheet_schedule_update.xml b/app/src/main/res/layout/sheet_schedule_update.xml index eca5c24..509600f 100644 --- a/app/src/main/res/layout/sheet_schedule_update.xml +++ b/app/src/main/res/layout/sheet_schedule_update.xml @@ -1,9 +1,9 @@ @@ -19,16 +19,12 @@ app:layout_constraintEnd_toEndOf="parent"/> diff --git a/app/src/main/res/layout/sheet_text.xml b/app/src/main/res/layout/sheet_text.xml index 72ea694..e7ded48 100644 --- a/app/src/main/res/layout/sheet_text.xml +++ b/app/src/main/res/layout/sheet_text.xml @@ -18,18 +18,14 @@ app:layout_constraintEnd_toEndOf="parent"/> + app:layout_constraintTop_toTopOf="parent"/> diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index d7cb7bf..3e50d67 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -102,4 +102,11 @@ + + \ No newline at end of file