From 0c75e5088fb6265c7deba4afe81050a7a023619f Mon Sep 17 00:00:00 2001 From: meiron03 Date: Thu, 21 Mar 2024 23:43:26 -0400 Subject: [PATCH] Start fix for GSR Booking --- .../pennmobile/GsrReservationsFragment.kt | 72 ++++++++++--------- .../pennapps/labs/pennmobile/MainActivity.kt | 10 --- .../adapters/GsrReservationsAdapter.kt | 13 ++-- .../labs/pennmobile/api/Serializer.java | 4 +- .../labs/pennmobile/api/StudentLife.kt | 3 + .../pennapps/labs/pennmobile/classes/GSR2.kt | 32 +++++++++ .../labs/pennmobile/classes/GSRReservation.kt | 24 +++---- .../pennapps/labs/pennmobile/classes/Venue.kt | 1 - 8 files changed, 92 insertions(+), 67 deletions(-) create mode 100644 PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/GSR2.kt diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/GsrReservationsFragment.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/GsrReservationsFragment.kt index 82f83f455..9e40b53ea 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/GsrReservationsFragment.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/GsrReservationsFragment.kt @@ -18,6 +18,10 @@ import com.pennapps.labs.pennmobile.adapters.GsrReservationsAdapter import com.pennapps.labs.pennmobile.databinding.FragmentGsrReservationsBinding import kotlinx.android.synthetic.main.loading_panel.loadingPanel +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext class GsrReservationsFragment : Fragment() { @@ -26,7 +30,6 @@ class GsrReservationsFragment : Fragment() { private var _binding : FragmentGsrReservationsBinding? = null private val binding get() = _binding!! - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -46,8 +49,6 @@ class GsrReservationsFragment : Fragment() { binding.gsrReservationsRefreshLayout.setColorSchemeResources(R.color.color_accent, R.color.color_primary) binding.gsrReservationsRefreshLayout.setOnRefreshListener { getReservations() } - getReservations() - return view } @@ -58,16 +59,7 @@ class GsrReservationsFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - if (!isOnline(context)) { - binding.internetConnectionGSRReservations.setBackgroundColor(resources.getColor(R.color.darkRedBackground)) - binding.internetConnectionMessageGsrReservations.text = "Not Connected to Internet" - binding.internetConnectionGSRReservations.visibility = View.VISIBLE - binding.gsrReservationsRefreshLayout.isRefreshing = false - loadingPanel?.visibility = View.GONE - binding.gsrNoReservations.visibility = View.VISIBLE - } else { - binding.internetConnectionGSRReservations.visibility = View.GONE - } + getReservations() } private fun getReservations() { @@ -91,37 +83,53 @@ class GsrReservationsFragment : Fragment() { val sessionID = sp.getString(getString(R.string.huntsmanGSR_SessionID), "") val email = sp.getString(getString(R.string.email_address), "") val token = sp.getString(getString(R.string.access_token), "") - labs.getGsrReservations("Bearer $token").subscribe({ reservations -> - mActivity.runOnUiThread { - loadingPanel?.visibility = View.GONE - try { + CoroutineScope(Dispatchers.IO).launch { + val response = labs.getGsrReservations2("Bearer $token") + if (response.isSuccessful) { + val reservations = response.body()!! + withContext(Dispatchers.Main) { + loadingPanel?.visibility = View.GONE binding.gsrReservationsRv.adapter = GsrReservationsAdapter(ArrayList(reservations)) - if (reservations.size > 0) { - binding.gsrNoReservations.visibility = View.GONE - } else { - binding.gsrNoReservations.visibility = View.VISIBLE + withContext(Dispatchers.Main) { + if (reservations.size > 0) { + binding.gsrNoReservations.visibility = View.GONE + } else { + binding.gsrNoReservations.visibility = View.VISIBLE + } + // stop refreshing + binding.gsrReservationsRefreshLayout.isRefreshing = false } - // stop refreshing - binding.gsrReservationsRefreshLayout.isRefreshing = false - } catch (e: Exception) { - FirebaseCrashlytics.getInstance().recordException(e) } + } else { + withContext(Dispatchers.Main) { + Log.e("GsrReservationsFragment", "Error getting reservations") + loadingPanel?.visibility = View.GONE + try { + binding.gsrReservationsRv.adapter = GsrReservationsAdapter(ArrayList()) + binding.gsrNoReservations.visibility = View.VISIBLE + binding.gsrReservationsRefreshLayout.isRefreshing = false + } catch (e: Exception) { + FirebaseCrashlytics.getInstance().recordException(e) + } + } } - }, { throwable -> + } + /*labs.getGsrReservations("Bearer $token").subscribe({ reservations -> mActivity.runOnUiThread { - Log.e("GsrReservationsFragment", "Error getting reservations", throwable) - throwable.printStackTrace() loadingPanel?.visibility = View.GONE + + Log.i("Fleegle", "fleegle") try { - binding.gsrReservationsRv.adapter = GsrReservationsAdapter(ArrayList()) - binding.gsrNoReservations.visibility = View.VISIBLE - binding.gsrReservationsRefreshLayout.isRefreshing = false + Log.i("Fleegle", "${reservations.size}") } catch (e: Exception) { FirebaseCrashlytics.getInstance().recordException(e) } } - }) + }, { throwable -> + mActivity.runOnUiThread { + } + })*/ } } diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/MainActivity.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/MainActivity.kt index facac30ad..95a1bc62f 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/MainActivity.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/MainActivity.kt @@ -319,18 +319,8 @@ class MainActivity : AppCompatActivity() { gsonBuilder.registerTypeAdapter(object : TypeToken?>() {}.type, DataSerializer()) gsonBuilder.registerTypeAdapter(object : TypeToken?>() {}.type, VenueSerializer()) gsonBuilder.registerTypeAdapter(DiningHall::class.java, MenuSerializer()) - // gets room - gsonBuilder.registerTypeAdapter(object : TypeToken() {}.type, LaundryRoomSerializer()) - // gets laundry room list - gsonBuilder.registerTypeAdapter(object : TypeToken?>() {}.type, LaundryRoomListSerializer()) gsonBuilder.registerTypeAdapter(object : TypeToken?>() {}.type, GsrLocationSerializer()) - // gets laundry usage - gsonBuilder.registerTypeAdapter(object : TypeToken() {}.type, LaundryUsageSerializer()) - // gets laundry preferences (used only for testing) - gsonBuilder.registerTypeAdapter(object : TypeToken?>() {}.type, LaundryPrefSerializer()) gsonBuilder.registerTypeAdapter(object : TypeToken?>() {}.type, FlingEventSerializer()) - // gets gsr reservations - gsonBuilder.registerTypeAdapter(object : TypeToken?>() {}.type, GsrReservationSerializer()) // gets user gsonBuilder.registerTypeAdapter(Account::class.java, UserSerializer()) // gets posts diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/adapters/GsrReservationsAdapter.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/adapters/GsrReservationsAdapter.kt index db5ba7373..aa600c840 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/adapters/GsrReservationsAdapter.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/adapters/GsrReservationsAdapter.kt @@ -39,17 +39,17 @@ class GsrReservationsAdapter(private var reservations: ArrayList override fun onBindViewHolder(holder: GsrReservationViewHolder, position: Int) { val reservation = reservations[position] - val roomName = reservation.name + val roomName = reservation.gsr!!.name val formatter: DateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ") - val from = formatter.parseDateTime(reservation.fromDate) - val to = formatter.parseDateTime(reservation.toDate) + val from = formatter.parseDateTime(reservation.start) + val to = formatter.parseDateTime(reservation.end) val day = from.toString("EEEE, MMMM d") val fromHour = from.toString("h:mm a") val toHour = to.toString("h:mm a") // huntsman reservation responses don't have an image url so we set it here - val imageUrl = reservation.info?.get("thumbnail") ?: "https://s3.us-east-2.amazonaws.com/labs.api/dining/MBA+Cafe.jpg" + val imageUrl = reservation.gsr?.image_url?: "https://s3.us-east-2.amazonaws.com/labs.api/dining/MBA+Cafe.jpg" Picasso.get().load(imageUrl).fit().centerCrop().into(holder.itemView.gsr_reservation_iv) holder.itemView.gsr_reservation_location_tv.text = roomName @@ -67,10 +67,7 @@ class GsrReservationsAdapter(private var reservations: ArrayList (mContext as MainActivity).mNetworkManager.getAccessToken { val sp = PreferenceManager.getDefaultSharedPreferences(mContext) - val sessionID = if (reservation.info == null) sp.getString( - mContext.getString(R.string.huntsmanGSR_SessionID), - "" - ) else null + val sessionID = "" val labs = MainActivity.studentLifeInstance val bearerToken = diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/Serializer.java b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/Serializer.java index 64f93c2c2..84a3db2f2 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/Serializer.java +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/Serializer.java @@ -212,7 +212,7 @@ public List deserialize(JsonElement json, Type typeOfT, JsonDeserial } // for GSR Reservations - public static class GsrReservationSerializer implements JsonDeserializer> { + /*public static class GsrReservationSerializer implements JsonDeserializer> { @Override public List deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) @@ -236,7 +236,7 @@ public List deserialize(JsonElement je, Type type, JsonDeseriali } return reservationList; } - } + }*/ // for custom posts public static class PostsSerializer implements JsonDeserializer> { diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/StudentLife.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/StudentLife.kt index 55ca11f2d..676f9a042 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/StudentLife.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/StudentLife.kt @@ -116,6 +116,9 @@ interface StudentLife { @GET("gsr/reservations") fun getGsrReservations(@Header("Authorization") bearerToken: String): Observable> + @GET("gsr/reservations") + suspend fun getGsrReservations2(@Header("Authorization") bearerToken: String): Response> + @FormUrlEncoded @POST("gsr/cancel/") fun cancelReservation( diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/GSR2.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/GSR2.kt new file mode 100644 index 000000000..1bb3606da --- /dev/null +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/GSR2.kt @@ -0,0 +1,32 @@ +package com.pennapps.labs.pennmobile.classes + +import com.google.gson.annotations.Expose +import com.google.gson.annotations.SerializedName + +//class that keeps track of all the GSR rooms themselves +class GSR2 { + + @SerializedName("id") + @Expose + var id : Int? = null + + @SerializedName("kind") + @Expose + var kind: String? = null + + @SerializedName("lid") + @Expose + var lid: String? = null + + @SerializedName("gid") + @Expose + var gid: Int? = null + + @SerializedName("name") + @Expose + var name: String? = null + + @SerializedName("image_url") + @Expose + var image_url: String? = null +} diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/GSRReservation.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/GSRReservation.kt index 74b163c54..f1957537b 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/GSRReservation.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/GSRReservation.kt @@ -9,32 +9,28 @@ class GSRReservation { @JvmField var booking_id: String? = null - @SerializedName("name") + @SerializedName("gsr") @Expose @JvmField - var name: String? = null + var gsr: GSR2? = null - @SerializedName("fromDate") + @SerializedName("room_id") @Expose @JvmField - var fromDate: String? = null + var room_id: Int? = null - @SerializedName("toDate") + @SerializedName("room_name") @Expose @JvmField - var toDate: String? = null + var room_name: String? = null - @SerializedName("gid") + @SerializedName("start") @Expose @JvmField - var gid: String? = null + var start: String? = null - @SerializedName("lid") - @Expose - var lid: String? = null - - @SerializedName("info") + @SerializedName("end") @Expose @JvmField - var info: Map? = null + var end: String? = null } \ No newline at end of file diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/Venue.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/Venue.kt index afc99d08d..8a8afbb71 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/Venue.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/classes/Venue.kt @@ -15,7 +15,6 @@ class Venue { var venueType: String? = null var extras: ArrayList? = null - //@SerializedName("dateHours") var hours: List = ArrayList() /**