diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/FitnessPreferenceViewModel.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/FitnessPreferenceViewModel.kt index 75faea787..54ba8e593 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/FitnessPreferenceViewModel.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/FitnessPreferenceViewModel.kt @@ -12,19 +12,20 @@ import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import rx.schedulers.Schedulers class FitnessPreferenceViewModel( - private val studentLife: StudentLife, - private val roomList: List, + private val mStudentLife: StudentLife, ) : FitnessAdapterDataModel { - private val roomTot = roomList.size + private lateinit var roomList: List + private var roomTot: Int = 0 // hashset of the favorite room ids private val favoriteRooms: HashSet = hashSetOf() private val prevFavoriteRooms: HashSet = hashSetOf() // hashmap that maps position --> position in array - private val positionMap: Array = (0 until roomTot).toList().toTypedArray() + private var positionMap: Array = (0 until roomTot).toList().toTypedArray() override fun flipState(roomId: Int): Boolean { if (favoriteRooms.contains(roomId)) { @@ -104,7 +105,7 @@ class FitnessPreferenceViewModel( GlobalScope.launch(Dispatchers.IO) { try { val response = - studentLife.sendFitnessPref( + mStudentLife.sendFitnessPref( bearerToken, FitnessRequest(ArrayList(favoriteRooms)), ) @@ -126,4 +127,53 @@ class FitnessPreferenceViewModel( } } } + + fun getFitnessRooms(mActivity: MainActivity) { + try { + mStudentLife.getFitnessRooms().subscribeOn(Schedulers.io()).subscribe({ fitnessRooms -> + val rooms = fitnessRooms?.filterNotNull().orEmpty() + + for (room in rooms) { + Log.i("Fitness Room${room.roomId}", "${room.roomName}") + } + val sortedRooms = rooms.sortedBy { it.roomName } + roomList = sortedRooms + roomTot = roomList.size + positionMap = (0 until roomTot).toList().toTypedArray() + + + mActivity.runOnUiThread { + mActivity.mNetworkManager.getAccessToken { + val sp = PreferenceManager.getDefaultSharedPreferences(mActivity) + val context = mActivity.applicationContext + val bearerToken = + "Bearer " + sp.getString(context.getString(R.string.access_token), "").toString() + + mStudentLife + .getFitnessPreferences(bearerToken) + .subscribeOn(Schedulers.io()) + .subscribe({ favorites -> + val favoriteRooms = favorites?.rooms?.filterNotNull().orEmpty() + for (roomId in favoriteRooms) { + addId(roomId) + } + + updatePositionMap() + }, { throwable -> + mActivity.runOnUiThread { + // call setAdapters + Log.e( + "Pottruck Fragment", + "Could not load Fitness Preferences", + throwable, + ) + } + }) + } + } + }) + } catch (e: Exception) { + e.printStackTrace() + } + } } diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/adapters/FitnessPagerAdapter.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/adapters/FitnessPagerAdapter.kt index 90a4a03fd..665d0f04b 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/adapters/FitnessPagerAdapter.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/adapters/FitnessPagerAdapter.kt @@ -2,7 +2,7 @@ package com.pennapps.labs.pennmobile.fitness.adapters import androidx.fragment.app.Fragment import androidx.viewpager2.adapter.FragmentStateAdapter -import com.pennapps.labs.pennmobile.gsr.fragments.PottruckFragment +import com.pennapps.labs.pennmobile.fitness.fragments.PottruckFragment class FitnessPagerAdapter( fragment: Fragment, diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/PottruckFragment.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/fragments/PottruckFragment.kt similarity index 67% rename from PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/PottruckFragment.kt rename to PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/fragments/PottruckFragment.kt index f6d5caee7..8c2104ff8 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/PottruckFragment.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/fragments/PottruckFragment.kt @@ -1,8 +1,7 @@ -package com.pennapps.labs.pennmobile.gsr.fragments +package com.pennapps.labs.pennmobile.fitness.fragments import StudentLife import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -12,7 +11,6 @@ import androidx.appcompat.widget.Toolbar import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment -import androidx.preference.PreferenceManager import androidx.recyclerview.widget.ConcatAdapter import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -25,11 +23,8 @@ import com.pennapps.labs.pennmobile.databinding.FragmentPottruckBinding import com.pennapps.labs.pennmobile.fitness.FitnessPreferenceViewModel import com.pennapps.labs.pennmobile.fitness.adapters.FitnessAdapter import com.pennapps.labs.pennmobile.fitness.adapters.FitnessHeaderAdapter -import com.pennapps.labs.pennmobile.fitness.fragments.CloseListener -import com.pennapps.labs.pennmobile.fitness.fragments.FitnessPreferencesFragment import com.pennapps.labs.pennmobile.isOnline import com.pennapps.labs.pennmobile.utils.Utils -import rx.schedulers.Schedulers class PottruckFragment : Fragment() { private lateinit var mActivity: MainActivity @@ -52,6 +47,7 @@ class PottruckFragment : Fragment() { super.onCreate(savedInstanceState) mStudentLife = MainActivity.studentLifeInstance mActivity = activity as MainActivity + dataModel = FitnessPreferenceViewModel(mStudentLife) } override fun onCreateView( @@ -82,74 +78,16 @@ class PottruckFragment : Fragment() { swipeRefresh.setColorSchemeResources(R.color.color_accent, R.color.color_primary) recyclerView.layoutManager = LinearLayoutManager(mActivity, LinearLayoutManager.VERTICAL, false) - swipeRefresh.setOnRefreshListener { getFitnessRooms() } + swipeRefresh.setOnRefreshListener { dataModel.getFitnessRooms(mActivity) } // populate the title/date of the app bar initAppBar() // populate recyclerview - getFitnessRooms() - } - - private fun getFitnessRooms() { - // displays banner if not connected - if (!getConnected()) return - - try { - mStudentLife.getFitnessRooms().subscribeOn(Schedulers.io()).subscribe({ fitnessRooms -> - val rooms = fitnessRooms?.filterNotNull().orEmpty() - for (room in rooms) { - Log.i("Fitness Room${room.roomId}", "${room.roomName}") - } - - val sortedRooms = rooms.sortedBy { it.roomName } - - dataModel = FitnessPreferenceViewModel(mStudentLife, sortedRooms) - - mActivity.mNetworkManager.getAccessToken { - val sp = PreferenceManager.getDefaultSharedPreferences(mActivity) - val context = mActivity.applicationContext - val bearerToken = - "Bearer " + sp.getString(context.getString(R.string.access_token), "").toString() - - mStudentLife - .getFitnessPreferences(bearerToken) - .subscribeOn(Schedulers.io()) - .subscribe({ favorites -> - - val favoriteRooms = favorites?.rooms?.filterNotNull().orEmpty() - - for (roomId in favoriteRooms) { - dataModel.addId(roomId) - } - dataModel.updatePositionMap() - - mActivity.runOnUiThread { - setAdapters() - } - }, { throwable -> - - mActivity.runOnUiThread { - // empty preferences - setAdapters() - Log.e( - "Pottruck Fragment", - "Could not load Fitness Preferences", - throwable, - ) - } - }) - } - }, { - Log.e("PottruckFragment", "Error getting fitness rooms", it) - mActivity.runOnUiThread { - Log.e("Fitness", "Could not load Pottruck page", it) - binding.loadingPanel.root.visibility = View.GONE - swipeRefresh.isRefreshing = false - } - }) - } catch (e: Exception) { - e.printStackTrace() + if (getConnected()) { + dataModel.getFitnessRooms(mActivity) + // call setAdapters() after calling getFitnessRooms from data model + setAdapters() } } diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/more/fragments/PreferenceFragment.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/more/fragments/PreferenceFragment.kt index 4a7474557..63bab9487 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/more/fragments/PreferenceFragment.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/more/fragments/PreferenceFragment.kt @@ -18,7 +18,7 @@ import androidx.preference.PreferenceManager import com.pennapps.labs.pennmobile.MainActivity import com.pennapps.labs.pennmobile.R import com.pennapps.labs.pennmobile.components.dialog.CustomAlertDialogue -import com.pennapps.labs.pennmobile.gsr.fragments.PottruckFragment +import com.pennapps.labs.pennmobile.fitness.fragments.PottruckFragment import com.pennapps.labs.pennmobile.home.fragments.NewsFragment import com.pennapps.labs.pennmobile.showSneakerToast