11package com.pennapps.labs.pennmobile.dining.fragments
22
3+ import android.content.Intent
34import android.graphics.Color
45import android.os.Bundle
56import android.view.LayoutInflater
@@ -8,20 +9,33 @@ import android.view.MenuInflater
89import android.view.MenuItem
910import android.view.View
1011import android.view.ViewGroup
11- import androidx.appcompat.widget.Toolbar
12+ import android.widget.Button
13+ import android.widget.ImageButton
14+ import android.widget.ImageView
15+ import android.widget.TextView
16+ import androidx.appcompat.app.AppCompatActivity
17+ import androidx.core.content.ContextCompat
18+ import androidx.core.net.toUri
19+ import androidx.core.view.WindowInsetsControllerCompat
1220import androidx.fragment.app.Fragment
1321import androidx.fragment.app.FragmentManager
1422import androidx.fragment.app.FragmentStatePagerAdapter
23+ import androidx.lifecycle.ViewModelProvider
24+ import androidx.lifecycle.lifecycleScope
1525import androidx.viewpager.widget.PagerAdapter
1626import androidx.viewpager.widget.ViewPager
27+ import com.google.android.material.appbar.CollapsingToolbarLayout
28+ import com.google.android.material.appbar.MaterialToolbar
29+ import com.google.android.material.tabs.TabLayout
1730import com.pennapps.labs.pennmobile.MainActivity
1831import com.pennapps.labs.pennmobile.R
1932import com.pennapps.labs.pennmobile.dining.classes.DiningHall
33+ import kotlinx.coroutines.launch
2034import org.apache.commons.lang3.StringUtils
2135
2236class MenuFragment : Fragment () {
2337 private lateinit var mActivity: MainActivity
24- private lateinit var toolBar : Toolbar
38+ private lateinit var viewModel : DiningViewModel
2539
2640 private var mDiningHall: DiningHall ? = null
2741 private var pageAdapter: PagerAdapter ? = null
@@ -92,7 +106,9 @@ class MenuFragment : Fragment() {
92106 super .onCreate(savedInstanceState)
93107 mDiningHall = arguments?.getParcelable(" DiningHall" )
94108 mActivity = activity as MainActivity
109+ viewModel = ViewModelProvider (requireActivity())[DiningViewModel ::class .java]
95110 setHasOptionsMenu(true )
111+ viewModel.refreshData()
96112 }
97113
98114 override fun onCreateView (
@@ -106,17 +122,94 @@ class MenuFragment : Fragment() {
106122 val pager: ViewPager = v.findViewById(R .id.menu_pager)
107123 pager.adapter = pageAdapter
108124 v.setBackgroundColor(Color .WHITE )
109- mActivity.addTabs(pageAdapter as TabAdapter , pager, true )
125+
126+ val tabLayout = v.findViewById<TabLayout >(R .id.dining_tab_layout)
127+ tabLayout.setupWithViewPager(pager)
128+ tabLayout.setTabTextColors(Color .WHITE , Color .WHITE )
129+
110130 return v
111131 }
112132
113133 override fun onViewCreated (
114134 view : View ,
115135 savedInstanceState : Bundle ? ,
116136 ) {
117- super .onViewCreated(view, savedInstanceState)
118- toolBar = mActivity.findViewById(R .id.toolbar)
119- toolBar.visibility = View .VISIBLE
137+ WindowInsetsControllerCompat (requireActivity().window, requireView()).isAppearanceLightStatusBars = false
138+
139+ val localToolbar = view.findViewById<MaterialToolbar >(R .id.dining_toolbar)
140+ (activity as AppCompatActivity ).setSupportActionBar(localToolbar)
141+ (activity as AppCompatActivity ).supportActionBar?.setDisplayHomeAsUpEnabled(true )
142+ localToolbar.navigationIcon?.setTint(Color .WHITE )
143+
144+ // set image
145+ val imageView = view.findViewById<ImageView >(R .id.dining_header_image)
146+ imageView.setImageResource(mDiningHall?.image ? : 0 )
147+
148+ // set title
149+ view.findViewById<CollapsingToolbarLayout >(R .id.collapsing_toolbar).title = mDiningHall?.name
150+ view.findViewById<CollapsingToolbarLayout >(R .id.collapsing_toolbar).setExpandedTitleColor(Color .WHITE )
151+ view.findViewById<CollapsingToolbarLayout >(R .id.collapsing_toolbar).setCollapsedTitleTextColor(Color .WHITE )
152+
153+ // set toolbar buttons
154+ view.findViewById<ImageButton >(R .id.dining_location).setOnClickListener {
155+ val location =
156+ when (mDiningHall?.name) {
157+ " Accenture Café" -> " Towne Building"
158+ " Cafe West" -> " Gutmann College House"
159+ " Falk Kosher Dining" -> " Penn Hillel"
160+ " Joe's Café" -> " 3620 Locust Walk"
161+ " McClelland Express" -> " 3700 Spruce Street"
162+ " Pret a Manger Locust" , " Pret a Manger MBA" -> " 3730 Walnut St, Philadelphia, PA 19104"
163+ else -> mDiningHall?.name
164+ }
165+ val diningHallMapUrl = " https://maps.google.com/?q=$location "
166+ val intent = Intent (Intent .ACTION_VIEW , diningHallMapUrl.toUri())
167+ startActivity(intent)
168+ }
169+
170+ view.findViewById<ImageButton >(R .id.dining_website).setOnClickListener {
171+ val website =
172+ when (mDiningHall?.name) {
173+ " Falk Kosher Dining" -> " Falk Dining Commons"
174+ " Accenture Café" -> " Accenture Cafe"
175+ " Joe's Café" -> " Joes Cafe"
176+ " English House" -> " kings court english house"
177+ " McClelland Express" -> " pdss"
178+ " Pret a Manger Locust" -> " Pret a Manger Lower"
179+ " Pret a Manger MBA" -> " Pret a Manger Upper"
180+ else -> mDiningHall?.name
181+ }
182+ val formattedDiningName = website?.lowercase()?.replace(" " , " -" )
183+ val diningHallMenuUrl = " https://university-of-pennsylvania.cafebonappetit.com/cafe/$formattedDiningName /"
184+ val intent = Intent (Intent .ACTION_VIEW , diningHallMenuUrl.toUri())
185+ startActivity(intent)
186+ }
187+
188+ val favoriteButton = view.findViewById<ImageButton >(R .id.favorite_dining)
189+
190+ fun updateFavoriteButton (isFavourite : Boolean ) {
191+ val icon =
192+ if (isFavourite) {
193+ R .drawable.ic_star_24dp
194+ } else {
195+ R .drawable.ic_star_border_24dp
196+ }
197+ favoriteButton.setImageResource(icon)
198+ favoriteButton.setColorFilter(ContextCompat .getColor(requireContext(), android.R .color.holo_orange_light))
199+ }
200+
201+ viewLifecycleOwner.lifecycleScope.launch {
202+ viewModel.favouriteDiningHallIds.collect { favoriteIds ->
203+ updateFavoriteButton(favoriteIds.contains(mDiningHall?.id))
204+ }
205+ }
206+
207+ favoriteButton.setOnClickListener {
208+ mDiningHall?.let { hall ->
209+ viewModel.toggleFavourite(hall)
210+ updateFavoriteButton(viewModel.isFavourite(hall))
211+ }
212+ }
120213 mActivity.hideBottomBar()
121214 }
122215
@@ -150,13 +243,11 @@ class MenuFragment : Fragment() {
150243 val pager: ViewPager = requireView().findViewById(R .id.menu_pager)
151244 pager.adapter = null
152245 }
246+ WindowInsetsControllerCompat (requireActivity().window, requireView()).isAppearanceLightStatusBars = true
153247
154248 super .onDestroyView()
155- mActivity.removeTabs()
156- if (mActivity.supportActionBar != null ) {
157- mActivity.supportActionBar?.setDisplayHomeAsUpEnabled(false )
158- }
159249 mActivity.supportActionBar?.hide()
250+ mActivity.showBottomBar()
160251 }
161252
162253 override fun onDestroy () {
0 commit comments