diff --git a/app/build.gradle b/app/build.gradle index 534536a..2c024c4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -37,14 +37,14 @@ android { dependencies { - implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.1' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.3' - implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1' - implementation 'androidx.navigation:navigation-ui-ktx:2.4.1' - implementation 'androidx.core:core-ktx:+' + implementation 'androidx.core:core-ktx:1.10.0' + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'com.google.android.material:material:1.8.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3' + implementation 'androidx.navigation:navigation-ui-ktx:2.5.3' + implementation 'androidx.core:core-ktx:1.10.0' testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.3' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.5' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' } \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/studip/adapter/StudIPEventAdapter.kt b/app/src/main/java/com/denizk0461/studip/adapter/StudIPEventAdapter.kt new file mode 100644 index 0000000..5eeb738 --- /dev/null +++ b/app/src/main/java/com/denizk0461/studip/adapter/StudIPEventAdapter.kt @@ -0,0 +1,45 @@ +package com.denizk0461.studip.adapter + +import android.util.Log +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.denizk0461.studip.data.StudIPEvent +import com.denizk0461.studip.databinding.ItemEventBinding +import com.denizk0461.studip.databinding.ItemEventPageBinding + +class StudIPEventAdapter(private val events: List) : RecyclerView.Adapter() { + + class EventViewHolder(val binding: ItemEventPageBinding) : RecyclerView.ViewHolder(binding.root) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EventViewHolder = EventViewHolder( + ItemEventPageBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + ) + + override fun getItemCount(): Int = 5 + + override fun onBindViewHolder(holder: EventViewHolder, position: Int) { + var itemCount = 0 + events.filter { it.day == position }.forEach { event -> + val newView = ItemEventBinding.inflate( + LayoutInflater.from(holder.binding.root.context), + holder.binding.root, + false + ).also { item -> + itemCount += 1 + item.textTitle.text = event.title + item.textLecturers.text = event.lecturer.joinToString(", ") + item.textRoom.text = event.room + item.textTimeslot.text = event.timeslot + } + holder.binding.pageLayout.addView(newView.root) + } + if (itemCount == 0) { + // TODO inflate view saying "no events!" or sth + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/studip/data/DummyData.kt b/app/src/main/java/com/denizk0461/studip/data/DummyData.kt index b02fade..95a6246 100644 --- a/app/src/main/java/com/denizk0461/studip/data/DummyData.kt +++ b/app/src/main/java/com/denizk0461/studip/data/DummyData.kt @@ -3,6 +3,11 @@ package com.denizk0461.studip.data object DummyData { val events: Array = arrayOf( - + StudIPEvent("Literatures", arrayOf("Nittel"), "MZH 1380/1400", 0, 3, 1), + StudIPEvent("Linguistics", arrayOf("Du Bois"), "SFG 1020", 1, 1, 1), + StudIPEvent("System Erde", arrayOf("Zolitschka", "Labuhn-Deroubaix"), "GW2 B1410", 1, 3, 1), + StudIPEvent("Key Moments", arrayOf("Esders-Angermund"), "GW2 B2890", 2, 2, 1), + StudIPEvent("ULS-1", arrayOf("Herrmann"), "GW2 B2890", 2, 3, 1), + StudIPEvent("Gesellschaft und Raum", arrayOf("Lossau", "Mossig"), "GW2 B1820", 3, 1, 1), ) } \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/studip/data/StudIPEvent.kt b/app/src/main/java/com/denizk0461/studip/data/StudIPEvent.kt index 6bfce5e..72dff39 100644 --- a/app/src/main/java/com/denizk0461/studip/data/StudIPEvent.kt +++ b/app/src/main/java/com/denizk0461/studip/data/StudIPEvent.kt @@ -4,9 +4,17 @@ data class StudIPEvent( val title: String, // the name of the event val lecturer: Array, // the lecturer(s) val room: String, // the room the event takes place in; assumes that the room doesn't change - val timeStart: Int, // 1 = 08:15, 2 = 10:15, 3 = 12:15, 4 = 14:15, 5 = 16:15, 6 = 18:15 - val timeLength: Int, // the amount of hours the course takes place over + val day: Int, // 0 = Monday, 1 = Tuesday, 2 = Wednesday, 3 = Thursday, 4 = Friday + val timeslotStart: Int, // 0 = 08:15, 1 = 10:15, 2 = 12:15, 3 = 14:15, 4 = 16:15, 5 = 18:15 + val timeslots: Int, // the amount of timeslots the course takes place over (1 timeslot = 90min) ) { + + private val timeSlotStartTimes: List = listOf("08:15", "10:15", "12:15", "14:15", "16:15", "18:15") + private val timeSlotEndTimes: List = listOf("09:45", "11:45", "13:45", "15:45", "17:45", "19:45") + + val timeslot: String = + "${timeSlotStartTimes[timeslotStart]} – ${timeSlotEndTimes[timeslots - 1]}" + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false diff --git a/app/src/main/java/com/denizk0461/studip/fragment/FirstFragment.kt b/app/src/main/java/com/denizk0461/studip/fragment/FirstFragment.kt index a395b87..c467afa 100644 --- a/app/src/main/java/com/denizk0461/studip/fragment/FirstFragment.kt +++ b/app/src/main/java/com/denizk0461/studip/fragment/FirstFragment.kt @@ -6,6 +6,12 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.navigation.fragment.findNavController +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.LinearSnapHelper +import androidx.recyclerview.widget.PagerSnapHelper +import com.denizk0461.studip.adapter.StudIPEventAdapter +import com.denizk0461.studip.data.DummyData import com.denizk0461.studip.databinding.FragmentFirstBinding /** @@ -18,16 +24,23 @@ class FirstFragment : Fragment() { // This property is only valid between onCreateView and // onDestroyView. private val binding get() = _binding!! + private lateinit var recyclerViewAdapter: StudIPEventAdapter + private lateinit var recyclerViewLayoutManager: LinearLayoutManager override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { _binding = FragmentFirstBinding.inflate(inflater, container, false) return binding.root - } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + recyclerViewAdapter = StudIPEventAdapter(DummyData.events.toList()) + binding.recyclerView.adapter = recyclerViewAdapter + recyclerViewLayoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) + binding.recyclerView.layoutManager = recyclerViewLayoutManager + PagerSnapHelper().attachToRecyclerView(binding.recyclerView) + // binding.buttonFirst.setOnClickListener { // findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment) // } diff --git a/app/src/main/res/layout/fragment_first.xml b/app/src/main/res/layout/fragment_first.xml index 6669a0f..0dac67d 100644 --- a/app/src/main/res/layout/fragment_first.xml +++ b/app/src/main/res/layout/fragment_first.xml @@ -1,18 +1,15 @@ - - + - - - - - \ No newline at end of file + \ 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 976183c..11802f6 100644 --- a/app/src/main/res/layout/item_event.xml +++ b/app/src/main/res/layout/item_event.xml @@ -1,6 +1,6 @@ diff --git a/app/src/main/res/layout/item_event_page.xml b/app/src/main/res/layout/item_event_page.xml new file mode 100644 index 0000000..5f07902 --- /dev/null +++ b/app/src/main/res/layout/item_event_page.xml @@ -0,0 +1,16 @@ + + + + + + + + \ No newline at end of file