diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeDetailsFragment.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeDetailsFragment.kt index e2103c72c..b72167c37 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeDetailsFragment.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeDetailsFragment.kt @@ -86,7 +86,7 @@ class SublesseeDetailsFragment (var dataModel: SublesseeViewModel, var position: interestedButton = binding.interestedSubletButton saveButton.setOnClickListener { - saveButton.text = "Saved" + /* saveButton.text = "Saved" var savedProperties = sharedPreferences.getStringSet("sublet_saved", HashSet())!!.toSet() var newSavedProperties = HashSet() newSavedProperties.addAll(savedProperties) @@ -97,7 +97,8 @@ class SublesseeDetailsFragment (var dataModel: SublesseeViewModel, var position: apply() } - dataModel.addSavedSublet(sublet) + dataModel.addSavedSublet(sublet) */ + dataModel.addSavedSublet(mActivity, sublet.id!!) Toast.makeText(context, "This property has been saved", Toast.LENGTH_LONG).show() mActivity.supportFragmentManager.beginTransaction() .replace(((view as ViewGroup).parent as View).id, SublesseeSavedFragment()) @@ -114,4 +115,9 @@ class SublesseeDetailsFragment (var dataModel: SublesseeViewModel, var position: .commit() } } + + override fun onDestroy() { + super.onDestroy() + _binding = null + } } \ No newline at end of file diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeInterestForm.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeInterestForm.kt index 74f60d88b..4681beadb 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeInterestForm.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeInterestForm.kt @@ -54,4 +54,9 @@ class SublesseeInterestForm (): Fragment() { .commit() } } + + override fun onDestroy() { + super.onDestroy() + _binding = null + } } \ No newline at end of file diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeSavedFragment.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeSavedFragment.kt index 4bdb43909..3295e2276 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeSavedFragment.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeSavedFragment.kt @@ -15,7 +15,7 @@ import com.pennapps.labs.pennmobile.classes.SublesseeViewModel import com.pennapps.labs.pennmobile.databinding.FragmentSublesseeInterestFormBinding import com.pennapps.labs.pennmobile.databinding.FragmentSublesseeSavedBinding -class SublesseeSavedFragment : Fragment() { +class SublesseeSavedFragment() : Fragment() { //create binding private var _binding : FragmentSublesseeSavedBinding? = null @@ -68,4 +68,9 @@ class SublesseeSavedFragment : Fragment() { .commit() } } + + override fun onDestroy() { + super.onDestroy() + _binding = null + } } \ No newline at end of file diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeSavedListingsHolderFragment.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeSavedListingsHolderFragment.kt index b30fb4296..b3846b91a 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeSavedListingsHolderFragment.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SublesseeSavedListingsHolderFragment.kt @@ -51,6 +51,7 @@ class SublesseeSavedListingsHolderFragment (): Fragment() { dataModel = SublesseeViewModel(mActivity, mStudentLife) dataModel.listSublets(mActivity) + dataModel.getFavoriteSublets(mActivity) val bundle = Bundle() } @@ -68,11 +69,11 @@ class SublesseeSavedListingsHolderFragment (): Fragment() { sublettingRecyclerView.layoutManager = newLayoutManager swipeRefreshLayout = binding.sublesseeSavedRefreshLayout - sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mActivity) + /* sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mActivity) val savedProperties = sharedPreferences.getStringSet("sublet_saved", HashSet()) - propertiesList = savedProperties!!.toList() + propertiesList = savedProperties!!.toList() */ - myAdapter = SublesseeSavedAdapter(dataModel, propertiesList) + myAdapter = SublesseeSavedAdapter(dataModel) dataModel.savedSublets.observe(viewLifecycleOwner) { sublets -> sublettingList = sublets Log.i("sublet saved", sublettingList.size.toString()) @@ -85,4 +86,9 @@ class SublesseeSavedListingsHolderFragment (): Fragment() { } } + + override fun onDestroy() { + super.onDestroy() + _binding = null + } } \ No newline at end of file diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SubletteeFragment.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SubletteeFragment.kt index 4d8c52c09..694b8d723 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SubletteeFragment.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SubletteeFragment.kt @@ -63,4 +63,9 @@ class SubletteeFragment : Fragment() { } } + override fun onDestroy() { + super.onDestroy() + _binding = null + } + } \ No newline at end of file diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SubletteeMarketplace.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SubletteeMarketplace.kt index 64c0451fe..5c0c4fd64 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SubletteeMarketplace.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/SubletteeMarketplace.kt @@ -171,4 +171,9 @@ class SubletteeMarketplace : Fragment() { } + + override fun onDestroy() { + super.onDestroy() + _binding = null + } } \ No newline at end of file diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/adapters/SublesseeSavedAdapter.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/adapters/SublesseeSavedAdapter.kt index 2953cd4e9..2de9ebcc1 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/adapters/SublesseeSavedAdapter.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/adapters/SublesseeSavedAdapter.kt @@ -19,7 +19,8 @@ import com.pennapps.labs.pennmobile.classes.SublesseeViewModel import com.pennapps.labs.pennmobile.classes.Sublet import com.pennapps.labs.pennmobile.classes.SublettingModel -class SublesseeSavedAdapter(var dataModel: SublesseeViewModel, var propertiesList: List): +//for the listview for the saved sublets +class SublesseeSavedAdapter(var dataModel: SublesseeViewModel): RecyclerView.Adapter() { private lateinit var mContext: Context @@ -46,8 +47,7 @@ class SublesseeSavedAdapter(var dataModel: SublesseeViewModel, var propertiesLis override fun onBindViewHolder(holder: SublesseeSavedItemViewHolder, position: Int) { - val subletId = propertiesList[position] - /* val actualSublet = dataModel.getSubletById(subletId, mActivity) + val actualSublet = dataModel.getSavedSublet(position) holder.listingTitle.text = actualSublet.title var price = "$" + actualSublet.price.toString() @@ -60,11 +60,7 @@ class SublesseeSavedAdapter(var dataModel: SublesseeViewModel, var propertiesLis append(actualSublet.startDate) append(" - ") append(actualSublet.endDate) - } */ - - holder.listingTitle.text = subletId - - + } holder.itemView.setOnClickListener { mActivity.supportFragmentManager.beginTransaction() @@ -76,6 +72,10 @@ class SublesseeSavedAdapter(var dataModel: SublesseeViewModel, var propertiesLis } override fun getItemCount(): Int { - return propertiesList.size + if (dataModel.getSavedSubletsList() == null) { + return 0 + } else { + return dataModel.getSavedSubletsList()!!.size + } } } \ No newline at end of file diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/adapters/SublesseeSavedPagerAdapter.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/adapters/SublesseeSavedPagerAdapter.kt index 4d2cb4317..50b828499 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/adapters/SublesseeSavedPagerAdapter.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/adapters/SublesseeSavedPagerAdapter.kt @@ -8,14 +8,14 @@ import com.pennapps.labs.pennmobile.SublesseeSavedListingsHolderFragment import com.pennapps.labs.pennmobile.SubletteeFragment import com.pennapps.labs.pennmobile.classes.SublesseeViewModel -//import com.pennapps.labs.pennmobile.SubletterFragment - class SublesseeSavedPagerAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) { override fun getItemCount(): Int = 2 override fun createFragment(position: Int): Fragment { return if (position == 0) { + //actual saved listings SublesseeSavedListingsHolderFragment() } else { + //applied, offers SublesseeAppliedListingsHolder() } } diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/StudentLife.java b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/StudentLife.java index 6410c0b75..370e380a0 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/StudentLife.java +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/StudentLife.java @@ -24,6 +24,7 @@ import com.pennapps.labs.pennmobile.classes.Post; import com.pennapps.labs.pennmobile.classes.SaveAccountResponse; import com.pennapps.labs.pennmobile.classes.Sublet; +import com.pennapps.labs.pennmobile.classes.SubletRequest; import com.pennapps.labs.pennmobile.classes.Venue; import com.pennapps.labs.pennmobile.classes.WhartonStatus; @@ -258,4 +259,17 @@ void deleteSublet( Observable> getSublets( @Header("Authorization") String bearerToken); + @Headers({"Content-Type: application/json"}) + @POST("/sublet/properties/{sublet_id}/favorites") + void addFavoriteSublet( + @Header("Authorization") String bearerToken, + @Body SubletRequest sublets, + @Path("sublet_id") int id, + Callback callback); + + @Headers({"Content-Type: application/json"}) + @GET("/sublet/favorites") + Observable> getSubletFavorites( + @Header("Authorization") String bearerToken); + } diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/SublesseeViewModel.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/SublesseeViewModel.kt index ccb906b45..e76672e2e 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/SublesseeViewModel.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/SublesseeViewModel.kt @@ -15,6 +15,7 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import retrofit.Callback +import retrofit.ResponseCallback import retrofit.RetrofitError import retrofit.client.Response import java.util.concurrent.CountDownLatch @@ -23,11 +24,16 @@ class SublesseeViewModel(private val activity: Activity, private val studentLife var sublettingList = MutableLiveData>() var savedSublets = MutableLiveData>() + var savedSubletIds = hashSetOf() fun getSublet(position : Int) : Sublet { return sublettingList.value?.get(position) ?: Sublet() // Provide a default value if needed } + fun getSavedSublet(position : Int) : Sublet { + return savedSublets.value?.get(position) ?: Sublet() // Provide a default value if needed + } + /* fun getSubletById(id: String, mActivity: MainActivity): Sublet { val context = activity.applicationContext val sp = PreferenceManager.getDefaultSharedPreferences(activity) @@ -67,14 +73,15 @@ class SublesseeViewModel(private val activity: Activity, private val studentLife return sublettingList.value } + fun getSavedSubletsList(): ArrayList? { + return savedSublets.value + } + fun listSublets(mActivity: MainActivity) { val context = activity.applicationContext val sp = PreferenceManager.getDefaultSharedPreferences(activity) - //var sublettingList = ArrayList() - //var fitnessRoomsList = ArrayList() - //for bearer token- not necessary when listing the sublets OAuth2NetworkManager(mActivity).getAccessToken { val bearerToken = @@ -97,18 +104,63 @@ class SublesseeViewModel(private val activity: Activity, private val studentLife Log.i("sublets", getSublettingList()?.size.toString()) } - fun getSavedSublets(): ArrayList? { + /* fun getSavedSublets(): ArrayList? { return savedSublets.value } fun getSavedSublet(position : Int) : Sublet { return savedSublets.value?.get(position) ?: Sublet() // Provide a default value if needed + } */ + + fun addSavedSublet(mActivity: MainActivity, id: Int) { + val context = activity.applicationContext + val sp = PreferenceManager.getDefaultSharedPreferences(activity) + + savedSubletIds.add(id) + + OAuth2NetworkManager(mActivity).getAccessToken { + + val bearerToken = + "Bearer " + sp.getString(context.getString(R.string.access_token), "").toString() + + + studentLife.addFavoriteSublet(bearerToken, SubletRequest(ArrayList(savedSubletIds)), id, object : Callback { + override fun success(t: Sublet?, response: Response?) { + Log.i("Sublessee View Model", "sublet added") + } + + override fun failure(error: RetrofitError?) { + Log.e("Sublessee View Model", "Error favoriting sublet $error", error) + Toast.makeText(activity, "An error has occurred. Please try again.", Toast.LENGTH_LONG).show() + } + }) + } } - fun addSavedSublet(s: Sublet) { - if (savedSublets.value == null) { - savedSublets.value = ArrayList() + fun getFavoriteSublets(mActivity: MainActivity) { + + val context = activity.applicationContext + val sp = PreferenceManager.getDefaultSharedPreferences(activity) + + OAuth2NetworkManager(mActivity).getAccessToken { + + val bearerToken = + "Bearer " + sp.getString(context.getString(R.string.access_token), "").toString() + + studentLife.getSubletFavorites(bearerToken).subscribe({ sublets -> + mActivity.runOnUiThread { + savedSublets.value = sublets as ArrayList + } + }, { throwable -> + mActivity.runOnUiThread { + Log.e( + "Sublessee Marketplace", + "Could not load saved Sublets", + throwable + ) + } + }) } - savedSublets.value!!.add(s) + Log.i("sublets", getSavedSubletsList()?.size.toString()) } } \ No newline at end of file diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/SubletRequest.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/SubletRequest.kt new file mode 100644 index 000000000..5172edfc6 --- /dev/null +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/SubletRequest.kt @@ -0,0 +1,5 @@ +package com.pennapps.labs.pennmobile.classes + +class SubletRequest(favoriteSublets: ArrayList) { + var sublets: ArrayList = favoriteSublets +} \ No newline at end of file