Archived
Added tabs to indicate which day is selected; not fully implemented. Tabs don't show which day is selected after certain user action
This commit is contained in:
@@ -29,11 +29,11 @@ class MainActivity : AppCompatActivity() {
|
|||||||
binding = ActivityMainBinding.inflate(layoutInflater)
|
binding = ActivityMainBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|
||||||
setSupportActionBar(binding.toolbar)
|
// setSupportActionBar(binding.toolbar)
|
||||||
|
|
||||||
val navController = findNavController(R.id.nav_host_fragment_content_main)
|
// val navController = findNavController(R.id.nav_host_fragment_content_main)
|
||||||
appBarConfiguration = AppBarConfiguration(navController.graph)
|
// appBarConfiguration = AppBarConfiguration(navController.graph)
|
||||||
setupActionBarWithNavController(navController, appBarConfiguration)
|
// setupActionBarWithNavController(navController, appBarConfiguration)
|
||||||
|
|
||||||
// binding.fab.setOnClickListener { view ->
|
// binding.fab.setOnClickListener { view ->
|
||||||
// findNavController(R.id.nav_host_fragment_content_main).navigate(R.id.action_FirstFragment_to_SecondFragment)
|
// findNavController(R.id.nav_host_fragment_content_main).navigate(R.id.action_FirstFragment_to_SecondFragment)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.denizk0461.studip.fragment
|
package com.denizk0461.studip.fragment
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@@ -9,12 +10,16 @@ import androidx.fragment.app.viewModels
|
|||||||
import androidx.navigation.fragment.NavHostFragment.Companion.findNavController
|
import androidx.navigation.fragment.NavHostFragment.Companion.findNavController
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.PagerSnapHelper
|
import androidx.recyclerview.widget.PagerSnapHelper
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import androidx.recyclerview.widget.RecyclerView.OnScrollListener
|
||||||
import com.denizk0461.studip.R
|
import com.denizk0461.studip.R
|
||||||
import com.denizk0461.studip.adapter.StudIPEventPageAdapter
|
import com.denizk0461.studip.adapter.StudIPEventPageAdapter
|
||||||
import com.denizk0461.studip.data.DummyData
|
import com.denizk0461.studip.data.DummyData
|
||||||
import com.denizk0461.studip.data.StudIPParser
|
import com.denizk0461.studip.data.StudIPParser
|
||||||
import com.denizk0461.studip.databinding.FragmentEventBinding
|
import com.denizk0461.studip.databinding.FragmentEventBinding
|
||||||
import com.denizk0461.studip.viewmodel.EventViewModel
|
import com.denizk0461.studip.viewmodel.EventViewModel
|
||||||
|
import com.google.android.material.tabs.TabLayout
|
||||||
|
import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
|
||||||
import java.time.DayOfWeek
|
import java.time.DayOfWeek
|
||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
import java.time.LocalTime
|
import java.time.LocalTime
|
||||||
@@ -31,8 +36,10 @@ class EventFragment : Fragment() {
|
|||||||
// onDestroyView.
|
// onDestroyView.
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
private lateinit var recyclerViewAdapter: StudIPEventPageAdapter
|
private lateinit var recyclerViewAdapter: StudIPEventPageAdapter
|
||||||
private lateinit var recyclerViewLayoutManager: LinearLayoutManager
|
private lateinit var layoutManager: LinearLayoutManager
|
||||||
private var dayOfWeek: Int = 0
|
private var dayOfWeek: Int = 0
|
||||||
|
private val pagerSnapHelper = PagerSnapHelper()
|
||||||
|
private var isUserScrolling = false
|
||||||
|
|
||||||
private val viewModel: EventViewModel by viewModels()
|
private val viewModel: EventViewModel by viewModels()
|
||||||
|
|
||||||
@@ -55,21 +62,48 @@ class EventFragment : Fragment() {
|
|||||||
viewModel.allEvents.observe(viewLifecycleOwner) { events ->
|
viewModel.allEvents.observe(viewLifecycleOwner) { events ->
|
||||||
recyclerViewAdapter = StudIPEventPageAdapter(events)//DummyData.events.toList())
|
recyclerViewAdapter = StudIPEventPageAdapter(events)//DummyData.events.toList())
|
||||||
binding.recyclerView.adapter = recyclerViewAdapter
|
binding.recyclerView.adapter = recyclerViewAdapter
|
||||||
recyclerViewLayoutManager =
|
layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
|
||||||
LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
|
binding.recyclerView.layoutManager = layoutManager
|
||||||
binding.recyclerView.layoutManager = recyclerViewLayoutManager
|
|
||||||
binding.recyclerView.onFlingListener = null
|
binding.recyclerView.onFlingListener = null
|
||||||
PagerSnapHelper().attachToRecyclerView(binding.recyclerView)
|
pagerSnapHelper.attachToRecyclerView(binding.recyclerView)
|
||||||
// binding.recyclerView.scheduleLayoutAnimation()
|
// binding.recyclerView.scheduleLayoutAnimation()
|
||||||
binding.recyclerView.scrollToPosition(dayOfWeek)
|
binding.recyclerView.scrollToPosition(dayOfWeek)
|
||||||
}
|
}
|
||||||
|
|
||||||
// viewModel.doAsync { StudIPParser().parse(requireContext()) }
|
|
||||||
|
|
||||||
binding.fab.setOnClickListener { view ->
|
binding.fab.setOnClickListener { view ->
|
||||||
launchWebview()
|
launchWebview()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.recyclerView.addOnScrollListener(object : OnScrollListener() {
|
||||||
|
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
|
||||||
|
super.onScrolled(recyclerView, dx, dy)
|
||||||
|
isUserScrolling = true
|
||||||
|
val i = if (dx < 0) {
|
||||||
|
layoutManager.findFirstVisibleItemPosition()
|
||||||
|
} else {
|
||||||
|
layoutManager.findLastVisibleItemPosition()
|
||||||
|
}
|
||||||
|
binding.dayTabs.getTabAt(i)?.select()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
binding.dayTabs.addOnTabSelectedListener(object : OnTabSelectedListener {
|
||||||
|
override fun onTabSelected(tab: TabLayout.Tab) {
|
||||||
|
if (!isUserScrolling) {
|
||||||
|
binding.recyclerView.smoothScrollToPosition(tab.position)
|
||||||
|
Log.d("HELLO4", binding.recyclerView.scrollY.toString())
|
||||||
|
} // TODO where to set isUserScrolling back to true?
|
||||||
|
}
|
||||||
|
override fun onTabUnselected(tab: TabLayout.Tab?) {}
|
||||||
|
override fun onTabReselected(tab: TabLayout.Tab?) {}
|
||||||
|
})
|
||||||
|
|
||||||
|
// binding.daytabmonday.setOnClickListener { binding.recyclerView.scrollToPosition(0) }
|
||||||
|
// binding.daytabtuesday.setOnClickListener { binding.recyclerView.scrollToPosition(1) }
|
||||||
|
// binding.daytabwednesday.setOnClickListener { binding.recyclerView.scrollToPosition(2) }
|
||||||
|
// binding.daytabthursday.setOnClickListener { binding.recyclerView.scrollToPosition(3) }
|
||||||
|
// binding.daytabfriday.setOnClickListener { binding.recyclerView.scrollToPosition(4) }
|
||||||
|
|
||||||
// binding.buttonFirst.setOnClickListener {
|
// binding.buttonFirst.setOnClickListener {
|
||||||
// findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
|
// findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
|
||||||
// }
|
// }
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import android.webkit.WebViewClient
|
|||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import com.denizk0461.studip.data.StudIPParser
|
import com.denizk0461.studip.data.StudIPParser
|
||||||
import com.denizk0461.studip.databinding.FragmentSecondBinding
|
import com.denizk0461.studip.databinding.FragmentParserBinding
|
||||||
import com.denizk0461.studip.viewmodel.ParserViewModel
|
import com.denizk0461.studip.viewmodel.ParserViewModel
|
||||||
import java.net.URLDecoder
|
import java.net.URLDecoder
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ import java.net.URLDecoder
|
|||||||
*/
|
*/
|
||||||
class ParserFragment : Fragment() {
|
class ParserFragment : Fragment() {
|
||||||
|
|
||||||
private var _binding: FragmentSecondBinding? = null
|
private var _binding: FragmentParserBinding? = null
|
||||||
private var html = "" // temporary storage for the website HTML
|
private var html = "" // temporary storage for the website HTML
|
||||||
|
|
||||||
// This property is only valid between onCreateView and
|
// This property is only valid between onCreateView and
|
||||||
@@ -33,7 +33,7 @@ class ParserFragment : Fragment() {
|
|||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View {
|
): View {
|
||||||
|
|
||||||
_binding = FragmentSecondBinding.inflate(inflater, container, false)
|
_binding = FragmentParserBinding.inflate(inflater, container, false)
|
||||||
return binding.root
|
return binding.root
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,18 +7,6 @@
|
|||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
tools:context=".activity.MainActivity">
|
tools:context=".activity.MainActivity">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:fitsSystemWindows="true">
|
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
|
||||||
android:id="@+id/toolbar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="?attr/actionBarSize" />
|
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
|
||||||
|
|
||||||
<include layout="@layout/content_main" />
|
<include layout="@layout/content_main" />
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
@@ -16,4 +16,5 @@
|
|||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:navGraph="@navigation/nav_graph" />
|
app:navGraph="@navigation/nav_graph" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -1,25 +1,77 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".fragment.EventFragment">
|
tools:context=".fragment.EventFragment">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fitsSystemWindows="true">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.CollapsingToolbarLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
app:title="title"/>
|
||||||
|
|
||||||
|
<com.google.android.material.tabs.TabLayout
|
||||||
|
android:id="@+id/day_tabs"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:tabMode="scrollable">
|
||||||
|
|
||||||
|
<com.google.android.material.tabs.TabItem
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/monday"/>
|
||||||
|
|
||||||
|
<com.google.android.material.tabs.TabItem
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/tuesday"/>
|
||||||
|
|
||||||
|
<com.google.android.material.tabs.TabItem
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/wednesday"/>
|
||||||
|
|
||||||
|
<com.google.android.material.tabs.TabItem
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/thursday"/>
|
||||||
|
|
||||||
|
<com.google.android.material.tabs.TabItem
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/friday"/>
|
||||||
|
|
||||||
|
</com.google.android.material.tabs.TabLayout>
|
||||||
|
|
||||||
|
</com.google.android.material.appbar.CollapsingToolbarLayout>
|
||||||
|
|
||||||
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/recycler_view"
|
android:id="@+id/recycler_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:scrollbars="horizontal"/>
|
android:scrollbars="horizontal"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
|
||||||
|
|
||||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
android:id="@+id/fab"
|
android:id="@+id/fab"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
android:layout_gravity="bottom|end"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
android:layout_marginEnd="@dimen/fab_margin"
|
android:layout_marginEnd="@dimen/fab_margin"
|
||||||
android:layout_marginBottom="@dimen/fab_margin"
|
android:layout_marginBottom="@dimen/fab_margin"
|
||||||
app:srcCompat="@android:drawable/ic_dialog_email" />
|
app:srcCompat="@android:drawable/ic_dialog_email" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
android:id="@+id/SecondFragment"
|
android:id="@+id/SecondFragment"
|
||||||
android:name="com.denizk0461.studip.fragment.ParserFragment"
|
android:name="com.denizk0461.studip.fragment.ParserFragment"
|
||||||
android:label="@string/second_fragment_label"
|
android:label="@string/second_fragment_label"
|
||||||
tools:layout="@layout/fragment_second">
|
tools:layout="@layout/fragment_parser">
|
||||||
|
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_SecondFragment_to_FirstFragment"
|
android:id="@+id/action_SecondFragment_to_FirstFragment"
|
||||||
|
|||||||
@@ -7,6 +7,12 @@
|
|||||||
<string name="next">Next</string>
|
<string name="next">Next</string>
|
||||||
<string name="previous">Previous</string>
|
<string name="previous">Previous</string>
|
||||||
|
|
||||||
|
<string name="monday">MONDAY</string>
|
||||||
|
<string name="tuesday">TUESDAY</string>
|
||||||
|
<string name="wednesday">WEDNESDAY</string>
|
||||||
|
<string name="thursday">THURSDAY</string>
|
||||||
|
<string name="friday">FRIDAY</string>
|
||||||
|
|
||||||
<string name="lorem_ipsum">
|
<string name="lorem_ipsum">
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam in scelerisque sem. Mauris
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam in scelerisque sem. Mauris
|
||||||
volutpat, dolor id interdum ullamcorper, risus dolor egestas lectus, sit amet mattis purus
|
volutpat, dolor id interdum ullamcorper, risus dolor egestas lectus, sit amet mattis purus
|
||||||
|
|||||||
Reference in New Issue
Block a user