Skip to content

Commit

Permalink
Fix the dining settings thing on the home page.
Browse files Browse the repository at this point in the history
  • Loading branch information
meiron03 committed Jan 6, 2024
1 parent d370cd1 commit 7f8df0e
Show file tree
Hide file tree
Showing 14 changed files with 86 additions and 45 deletions.
2 changes: 1 addition & 1 deletion PennMobile/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ dependencies {
implementation 'joda-time:joda-time:2.12.5'
implementation 'org.apache.commons:commons-lang3:3.13.0'
implementation 'androidx.annotation:annotation:1.7.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0'
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0'
implementation ("androidx.lifecycle:lifecycle-extensions:2.2.0@aar") {
transitive = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,20 @@ import com.pennapps.labs.pennmobile.adapters.DiningSettingsAdapter
import com.pennapps.labs.pennmobile.api.StudentLife
import com.pennapps.labs.pennmobile.classes.DiningHall
import com.pennapps.labs.pennmobile.classes.DiningRequest
import com.pennapps.labs.pennmobile.classes.HomepageDataModel
import com.pennapps.labs.pennmobile.databinding.FragmentDiningPreferencesBinding
import kotlinx.android.synthetic.main.include_main.toolbar

import retrofit.ResponseCallback
import retrofit.RetrofitError
import retrofit.client.Response
import rx.Observable

class DiningSettingsFragment : Fragment() {
class DiningSettingsFragment(dataModel: HomepageDataModel) : Fragment() {
private lateinit var mActivity: MainActivity
private lateinit var mStudentLife: StudentLife
private lateinit var halls: List<DiningHall>
private val dataModel : HomepageDataModel = dataModel

private var _binding : FragmentDiningPreferencesBinding? = null
private val binding get() = _binding!!
Expand All @@ -30,10 +33,10 @@ class DiningSettingsFragment : Fragment() {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
mActivity = activity as MainActivity
mActivity.toolbar.visibility = View.VISIBLE
mActivity.title = "Select Favorites"
mStudentLife = MainActivity.studentLifeInstance
mStudentLife = MainActivity.studentLifeInstance
mActivity.hideBottomBar()
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
Expand All @@ -42,6 +45,7 @@ class DiningSettingsFragment : Fragment() {
binding.diningHallRv.layoutManager = LinearLayoutManager(context,
LinearLayoutManager.VERTICAL, false)
mActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
mActivity.hideBottomBar()
getDiningHalls()
return v
}
Expand All @@ -52,11 +56,13 @@ class DiningSettingsFragment : Fragment() {
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
mActivity.toolbar.visibility = View.GONE
when (item.itemId) {
android.R.id.home -> {
mActivity.onBackPressed()
return true
}

R.id.save_button -> {
saveDiningPreferences()
return true
Expand Down Expand Up @@ -87,8 +93,8 @@ class DiningSettingsFragment : Fragment() {

override fun onDestroyView() {
super.onDestroyView()
mActivity.toolbar.visibility = View.GONE
_binding = null
mActivity.hideBottomBar()
}

private fun saveDiningPreferences() {
Expand All @@ -101,12 +107,16 @@ class DiningSettingsFragment : Fragment() {
favoriteDiningHalls.add(hall.id)
}
}

dataModel.updateDining(favoriteDiningHalls)

mActivity.mNetworkManager.getAccessToken {
val bearerToken =
"Bearer " + sp.getString(getString(R.string.access_token), "").toString()
mStudentLife.sendDiningPref(bearerToken, DiningRequest(favoriteDiningHalls),
object : ResponseCallback() {
override fun success(response: Response) {
Log.i("Dining", "Dining preferences saved")
mActivity.onBackPressed()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,16 @@ import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.os.Handler
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager
Expand Down Expand Up @@ -56,6 +59,7 @@ class HomeFragment : Fragment() {
bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, "Home")
bundle.putString(FirebaseAnalytics.Param.ITEM_CATEGORY, "App Feature")
FirebaseAnalytics.getInstance(mActivity).logEvent(FirebaseAnalytics.Event.VIEW_ITEM, bundle)

}

override fun onCreateView(
Expand Down Expand Up @@ -111,13 +115,30 @@ class HomeFragment : Fragment() {
set to View.VISIBLE instead of View.INVISIBLE and hide loadingPanel
*/
homepageViewModel.resetBlurViews()
getHomePage()
homepageViewModel.blurViewsLoaded.observe(viewLifecycleOwner) { loaded ->
if (loaded) {
binding.homeCellsRv.visibility = View.VISIBLE
loadingPanel?.visibility = View.GONE
}
}

viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
homepageViewModel.updateState.collect { updateState ->
Log.i("Fuck", "fuck")
updateState.positions.firstOrNull()?.let { pos ->
if (binding.homeCellsRv.adapter != null) {
mActivity.runOnUiThread {
binding.homeCellsRv.adapter!!.notifyItemChanged(pos)
}
homepageViewModel.updatedPosition(pos)
}
}
}
}
}

getHomePage()
}

private fun getOnline() : Boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ class LaundryFragment : Fragment() {
mStudentLife = MainActivity.studentLifeInstance
mActivity = activity as MainActivity
mContext = mActivity
setHasOptionsMenu(true)
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
Expand Down Expand Up @@ -124,26 +123,7 @@ class LaundryFragment : Fragment() {
}
}

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.laundry_menu, menu)
super.onCreateOptionsMenu(menu, inflater)
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
val id = item.itemId
if (id == R.id.laundry_settings) {
val fragmentManager = mActivity.supportFragmentManager
fragmentManager.beginTransaction()
.replace(R.id.content_frame, LaundrySettingsFragment())
.addToBackStack("Laundry Settings Fragment")
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
return true
}
return super.onOptionsItemSelected(item)
}
private fun updateRooms() {

//displays banner if not connected
if (!isOnline(context)) {
binding.internetConnectionLaundry.setBackgroundColor(resources.getColor(R.color.darkRedBackground))
Expand Down Expand Up @@ -250,4 +230,4 @@ class LaundryFragment : Fragment() {
})
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.pennapps.labs.pennmobile
import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
import android.util.Log
import android.view.*
import android.widget.Button
import android.widget.RelativeLayout
Expand Down Expand Up @@ -40,7 +41,7 @@ class LaundrySettingsFragment : Fragment() {
mActivity = activity as MainActivity
mContext = mActivity
mActivity.closeKeyboard()
setHasOptionsMenu(true)
//setHasOptionsMenu(true)
mActivity.toolbar.visibility = View.VISIBLE
mActivity.hideBottomBar()

Expand Down Expand Up @@ -144,11 +145,6 @@ class LaundrySettingsFragment : Fragment() {
})
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
mActivity.onBackPressed()
return true
}

override fun onResume() {
super.onResume()
mActivity.removeTabs()
Expand All @@ -159,6 +155,7 @@ class LaundrySettingsFragment : Fragment() {
override fun onDestroyView() {
super.onDestroyView()
mActivity.supportActionBar?.setDisplayHomeAsUpEnabled(false)
mActivity.toolbar.visibility = View.GONE
_binding = null
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class MainActivity : AppCompatActivity() {

val tokenMutex = Mutex()
val mNetworkManager by lazy { OAuth2NetworkManager(this) }

override fun onCreate(savedInstanceState: Bundle?) {
setTheme(R.style.AppTheme)
if (Build.VERSION.SDK_INT > 28) {
Expand All @@ -81,7 +82,8 @@ class MainActivity : AppCompatActivity() {
val policy = StrictMode.ThreadPolicy.Builder().permitAll().build()
StrictMode.setThreadPolicy(policy)
val mainPagerAdapter = MainPagerAdapter(fragmentManager, lifecycle)
main_view_pager?.adapter = mainPagerAdapter
main_view_pager.setSaveEnabled(false);
main_view_pager.adapter = mainPagerAdapter
main_view_pager.isUserInputEnabled = false
main_view_pager.offscreenPageLimit = 5
onExpandableBottomNavigationItemSelected()
Expand Down Expand Up @@ -134,10 +136,6 @@ class MainActivity : AppCompatActivity() {
}
}
main_view_pager.visibility = View.VISIBLE
val mainPagerAdapter = MainPagerAdapter(fragmentManager, lifecycle)
main_view_pager?.adapter = mainPagerAdapter
main_view_pager.isUserInputEnabled = false
main_view_pager.offscreenPageLimit = 5
expandable_bottom_bar.visibility = View.VISIBLE
setTab(HOME_ID)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.pennapps.labs.pennmobile.adapters

import android.content.Context
import android.content.SharedPreferences
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand Down Expand Up @@ -39,10 +40,12 @@ class DiningSettingsAdapter(private var diningHalls: List<DiningHall>)
val editor = sp.edit()
editor.putBoolean(hall.name, switch.isChecked)
editor.apply()

Log.i("Dining", "hi yeah")
}
}

inner class DiningSettingsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val view = itemView
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ class HomeAdapter(private val dataModel: HomepageDataModel) :
holder.itemView.dining_prefs_btn.visibility = View.VISIBLE
holder.itemView.dining_prefs_btn.setOnClickListener {
mActivity.supportFragmentManager.beginTransaction()
.replace(R.id.content_frame, DiningSettingsFragment())
.replace(R.id.content_frame, DiningSettingsFragment(dataModel))
.addToBackStack(null)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ interface HomepageDataModel {
fun getCell(position: Int) : HomeCell
fun notifyPostBlurLoaded()
fun notifyNewsBlurLoaded()
}
fun updateDining(venues: List<Int>)
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.pennapps.labs.pennmobile.api.StudentLife
import com.pennapps.labs.pennmobile.utils.Utils.getSha256Hash
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Mutex
Expand Down Expand Up @@ -37,6 +41,12 @@ class HomepageViewModel : HomepageDataModel, ViewModel() {
private val homepageCells = mutableListOf<HomeCell>()
private val cellMutex = Mutex()

data class ItemUpdateEvents(val positions : List<Int> = emptyList())


private val _updateState = MutableStateFlow(ItemUpdateEvents())
val updateState: StateFlow<ItemUpdateEvents> = _updateState.asStateFlow()

/* Changes to true once both of the blur views are done generating.
Should be changed to false whenever HomeFragment is initially created because the RecyclerView
is only shown when this value changes from false to true
Expand All @@ -57,6 +67,20 @@ class HomepageViewModel : HomepageDataModel, ViewModel() {
}
}

fun updatedPosition(pos: Int) {
_updateState.update { currentUpdateState ->
val npositions = currentUpdateState.positions.filterNot { it == pos }
currentUpdateState.copy(positions = npositions)
}
}

fun updatePosition(pos: Int) {
_updateState.update { currentUpdateState ->
val npositions = currentUpdateState.positions + pos
currentUpdateState.copy(positions = npositions)
}
}

/**
* Resets the blur view. Should be called from main thread because updating _blurViewsLoaded
* must be synchronous.
Expand Down Expand Up @@ -289,6 +313,7 @@ class HomepageViewModel : HomepageDataModel, ViewModel() {
newsBlurMutex.unlock()
}


/**
* Allows adapter to tell the ViewModel that the post blur view is processed
*/
Expand All @@ -314,6 +339,12 @@ class HomepageViewModel : HomepageDataModel, ViewModel() {
}

override fun getCell(position: Int): HomeCell {
// be careful to not read an old value
return homepageCells[position]
}

override fun updateDining(venues : List<Int>) {
addCell(DiningCell(venues), DINING_POS)
updatePosition(DINING_POS)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
2 changes: 1 addition & 1 deletion PennMobile/src/main/res/layout/include_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,4 @@
app:layout_behavior=".components.floatingbottombar.behavior.ExpandableBottomBarScrollableBehavior"
app:menu="@menu/bottom_nav_bar" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
2 changes: 1 addition & 1 deletion PennMobile/src/main/res/menu/dining.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
</menu>
</menu>
2 changes: 1 addition & 1 deletion PennMobile/src/main/res/menu/dining_preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
android:id="@+id/save_button"
android:title="Save "
app:showAsAction="always" />
</menu>
</menu>

0 comments on commit 7f8df0e

Please sign in to comment.