diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/HuntsmanGSRLogin.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/HuntsmanGSRLogin.kt index 46ddb0a66..06b8aed0d 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/HuntsmanGSRLogin.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/HuntsmanGSRLogin.kt @@ -1,5 +1,6 @@ package com.pennapps.labs.pennmobile.api +import StudentLifeRf2 import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -11,15 +12,13 @@ import android.webkit.WebViewClient import android.widget.Toast import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction +import androidx.lifecycle.lifecycleScope import androidx.preference.PreferenceManager import com.pennapps.labs.pennmobile.MainActivity import com.pennapps.labs.pennmobile.R import com.pennapps.labs.pennmobile.databinding.FragmentHuntsmanGsrloginBinding -import com.pennapps.labs.pennmobile.gsr.classes.GSRBookingResult import com.pennapps.labs.pennmobile.gsr.fragments.GsrTabbedFragment -import retrofit.Callback -import retrofit.RetrofitError -import retrofit.client.Response +import kotlinx.coroutines.launch class HuntsmanGSRLogin : Fragment() { // gsr details @@ -31,6 +30,7 @@ class HuntsmanGSRLogin : Fragment() { private var gid: Int = 0 private lateinit var mStudentLife: StudentLife + private lateinit var mStudentLifeRf2: StudentLifeRf2 private lateinit var mActivity: MainActivity private var _binding: FragmentHuntsmanGsrloginBinding? = null @@ -39,6 +39,7 @@ class HuntsmanGSRLogin : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mStudentLife = MainActivity.studentLifeInstance + mStudentLifeRf2= MainActivity.studentLifeInstanceRf2 mActivity = activity as MainActivity arguments?.let { arguments -> gsrID = arguments.getString("gsrID") ?: "" @@ -124,68 +125,64 @@ class HuntsmanGSRLogin : Fragment() { sessionID: String, ) { (activity as MainActivity).mNetworkManager.getAccessToken { - try { - mStudentLife.bookGSR( - // Passing the values - bearerToken, - startTime, - endTime, - gid, - Integer.parseInt(gsrID), - roomName, - // Creating an anonymous callback - object : Callback { - override fun success( - result: GSRBookingResult?, - response: Response?, - ) { - // Display the output as a toast - if (result?.getResults() == true) { - Toast - .makeText(mActivity, "GSR successfully booked", Toast.LENGTH_LONG) - .show() - } else { - Log.e("HuntsmanGSRLogin", "GSR booking failed: " + result?.getError()) - Toast - .makeText(mActivity, "GSR booking failed", Toast.LENGTH_LONG) - .show() - val sp = PreferenceManager.getDefaultSharedPreferences(mActivity) - val editor = sp.edit() - editor.remove(getString(R.string.huntsmanGSR_SessionID)) - editor.apply() - } - // redirect user - val gsrFragment = GsrTabbedFragment() - val fragmentManager = mActivity.supportFragmentManager - fragmentManager - .beginTransaction() - .replace(R.id.content_frame, gsrFragment) - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - .commit() - } - - override fun failure(error: RetrofitError?) { - // If any error occurred display the error as toast - Log.e("HuntsmanGSRLogin", "GSR booking failed" + error.toString()) - Toast.makeText(mActivity, "GSR booking failed", Toast.LENGTH_LONG).show() + viewLifecycleOwner.lifecycleScope.launch { + try { + val response = mStudentLifeRf2.bookGSR( + // Passing the values + bearerToken, + startTime, + endTime, + gid, + Integer.parseInt(gsrID), + roomName + ) + if (response.isSuccessful) { + val result = response.body() + if (result?.getResults() == true) { + Toast + .makeText(mActivity, "GSR successfully booked", Toast.LENGTH_LONG) + .show() + } else { + Log.e("HuntsmanGSRLogin", "GSR booking failed: " + result?.getError()) + Toast + .makeText(mActivity, "GSR booking failed", Toast.LENGTH_LONG) + .show() val sp = PreferenceManager.getDefaultSharedPreferences(mActivity) val editor = sp.edit() editor.remove(getString(R.string.huntsmanGSR_SessionID)) editor.apply() - // redirect user - val gsrFragment = GsrTabbedFragment() - val fragmentManager = mActivity.supportFragmentManager - fragmentManager - .beginTransaction() - .replace(R.id.content_frame, gsrFragment) - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - .commit() } - }, - ) - } catch (e: Exception) { - e.printStackTrace() + // redirect user + val gsrFragment = GsrTabbedFragment() + val fragmentManager = mActivity.supportFragmentManager + fragmentManager + .beginTransaction() + .replace(R.id.content_frame, gsrFragment) + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .commit() + } else { + val error = Exception(response.errorBody().toString()) + Log.e("HuntsmanGSRLogin", "GSR booking failed $error") + Toast.makeText(mActivity, "GSR booking failed", Toast.LENGTH_LONG).show() + val sp = PreferenceManager.getDefaultSharedPreferences(mActivity) + val editor = sp.edit() + editor.remove(getString(R.string.huntsmanGSR_SessionID)) + editor.apply() + // redirect user + val gsrFragment = GsrTabbedFragment() + val fragmentManager = mActivity.supportFragmentManager + fragmentManager + .beginTransaction() + .replace(R.id.content_frame, gsrFragment) + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .commit() + } + } catch (e: Exception) { + e.printStackTrace() + } + } + } } } 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 2eaaae1bb..e6f5eeb5b 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 @@ -1,29 +1,16 @@ package com.pennapps.labs.pennmobile.api; -import com.pennapps.labs.pennmobile.api.classes.Account; import com.pennapps.labs.pennmobile.dining.classes.DiningHall; -import com.pennapps.labs.pennmobile.dining.classes.DiningRequest; import com.pennapps.labs.pennmobile.fling.classes.FlingEvent; -import com.pennapps.labs.pennmobile.gsr.classes.GSRBookingResult; import com.pennapps.labs.pennmobile.gsr.classes.GSRLocation; import com.pennapps.labs.pennmobile.gsr.classes.GSRReservation; -import com.pennapps.labs.pennmobile.home.classes.Poll; import com.pennapps.labs.pennmobile.home.classes.Post; -import com.pennapps.labs.pennmobile.api.classes.SaveAccountResponse; import com.pennapps.labs.pennmobile.dining.classes.Venue; -import java.util.ArrayList; import java.util.List; -import retrofit.Callback; -import retrofit.client.Response; -import retrofit.http.Body; -import retrofit.http.Field; -import retrofit.http.FormUrlEncoded; import retrofit.http.GET; import retrofit.http.Header; -import retrofit.http.Headers; -import retrofit.http.POST; import retrofit.http.Path; import rx.Observable; @@ -47,17 +34,6 @@ Observable daily_menu( @GET("/gsr/locations") Observable> location (); - @FormUrlEncoded - @POST("/gsr/book/") - void bookGSR( - @Header("Authorization") String bearerToken, - @Field("start_time") String start, - @Field("end_time") String end, - @Field("gid") int gid, - @Field("id") int id, - @Field("room_name") String roomName, - Callback callback); - @GET("/events/fling") Observable> getFlingEvents(); @@ -66,52 +42,12 @@ Observable> getGsrReservations( @Header("Authorization") String bearerToken ); - @FormUrlEncoded - @POST("/gsr/cancel/") - void cancelReservation( - @Header("Authorization") String bearerToken, - @Header("X-Device-ID") String deviceID, - @Field("booking_id") String bookingID, - @Field("sessionid") String sessionID, - Callback callback); - - // accounts - @Headers({"Content-Type: application/json"}) - @POST("/users/{pennkey}/activate/") - void saveAccount( - @Header("Authorization") String bearerToken, - @Path("pennkey") String pennkey, - @Body Account account, - Callback callback); - @GET("/laundry/preferences") Observable> getLaundryPref( @Header("Authorization") String bearerToken); - @Headers({"Content-Type: application/json"}) - @POST("/dining/preferences/") - void sendDiningPref( - @Header("Authorization") String bearerToken, - @Body DiningRequest body, - Callback callback); - @GET("/portal/posts/browse/") Observable> validPostsList( @Header("Authorization") String bearerToken ); - - @FormUrlEncoded - @POST("/portal/polls/browse/") - Observable> browsePolls( - @Header("Authorization") String bearerToken, - @Field("id_hash") String idHash - ); - - @FormUrlEncoded - @POST("/portal/votes/") - void createPollVote( - @Header("Authorization") String bearerToken, - @Field("id_hash") String idHash, - @Field("poll_options") ArrayList pollOptions, - Callback callback); } diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/StudentLifeRf2.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/StudentLifeRf2.kt index be97c63e0..b9df4d7cc 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/StudentLifeRf2.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/api/StudentLifeRf2.kt @@ -1,25 +1,30 @@ import com.pennapps.labs.pennmobile.api.classes.AccessTokenResponse import com.pennapps.labs.pennmobile.dining.classes.DiningPreferences +import com.pennapps.labs.pennmobile.dining.classes.DiningRequest import com.pennapps.labs.pennmobile.fitness.classes.FitnessPreferences import com.pennapps.labs.pennmobile.fitness.classes.FitnessRequest import com.pennapps.labs.pennmobile.fitness.classes.FitnessRoom import com.pennapps.labs.pennmobile.fitness.classes.FitnessRoomUsage import com.pennapps.labs.pennmobile.gsr.classes.GSR +import com.pennapps.labs.pennmobile.gsr.classes.GSRBookingResult import com.pennapps.labs.pennmobile.gsr.classes.WhartonStatus import com.pennapps.labs.pennmobile.home.classes.Article import com.pennapps.labs.pennmobile.home.classes.CalendarEvent +import com.pennapps.labs.pennmobile.home.classes.Poll import com.pennapps.labs.pennmobile.laundry.classes.LaundryPreferences import com.pennapps.labs.pennmobile.laundry.classes.LaundryRequest import com.pennapps.labs.pennmobile.laundry.classes.LaundryRoom import com.pennapps.labs.pennmobile.laundry.classes.LaundryRoomSimple import com.pennapps.labs.pennmobile.laundry.classes.LaundryUsage import okhttp3.ResponseBody +import retrofit.Callback import retrofit2.Response import retrofit2.http.Body import retrofit2.http.Field import retrofit2.http.FormUrlEncoded import retrofit2.http.GET import retrofit2.http.Header +import retrofit2.http.Headers import retrofit2.http.POST import retrofit2.http.Path import retrofit2.http.Query @@ -56,7 +61,7 @@ interface StudentLifeRf2 { @GET("laundry/hall/{id}") fun roomObservable( @Path("id") id: Int - ): Observable? + ): Observable @GET("laundry/usage/{id}") suspend fun usage( @@ -75,19 +80,19 @@ interface StudentLifeRf2 { ): Response @GET("penndata/fitness/rooms/") - fun getFitnessRooms(): Observable?>? + fun getFitnessRooms(): Observable?> @GET("penndata/fitness/usage/{id}") fun getFitnessRoomUsage( @Path("id") id: Int, @Query("num_samples") samples: Int, @Query("group_by") groupBy: String? - ): Observable? + ): Observable @GET("penndata/fitness/preferences") fun getFitnessPreferences( @Header("Authorization") bearerToken: String? - ): Observable? + ): Observable @POST("penndata/fitness/preferences/") suspend fun sendFitnessPref( @@ -98,7 +103,7 @@ interface StudentLifeRf2 { @GET("dining/preferences") fun getDiningPreferences( @Header("Authorization") bearerToken: String? - ): Observable? + ): Observable @GET("gsr/availability/{id}/{gid}") fun gsrRoom( @@ -106,17 +111,59 @@ interface StudentLifeRf2 { @Path("id") id: String?, @Path("gid") gid: Int, @Query("start") date: String? - ): Observable? + ): Observable @GET("gsr/wharton") fun isWharton( @Header("Authorization") bearerToken: String? - ): Observable? + ): Observable @GET("penndata/news") - fun getNews(): Observable? + fun getNews(): Observable @GET("penndata/calendar") - fun getCalendar(): Observable?>? + fun getCalendar(): Observable?> + + @FormUrlEncoded + @POST("gsr/book/") + suspend fun bookGSR( + @Header("Authorization") bearerToken: String, + @Field("start_time") start: String?, + @Field("end_time") end: String?, + @Field("gid") gid: Int, + @Field("id") id: Int, + @Field("room_name") roomName: String, + ): Response + + @FormUrlEncoded + @POST("gsr/cancel/") + suspend fun cancelReservation( + @Header("Authorization") bearerToken: String, + @Header("X-Device-ID") deviceID: String?, + @Field("booking_id") bookingID: String?, + @Field("sessionid") sessionID: String?, + ): Response + + @Headers("Content-Type: application/json") + @POST("dining/preferences/") + suspend fun sendDiningPref( + @Header("Authorization") bearerToken: String, + @Body body: DiningRequest, + ): Response + + @FormUrlEncoded + @POST("portal/polls/browse/") + fun browsePolls( + @Header("Authorization") bearerToken: String, + @Field("id_hash") idHash: String + ): Observable?> + + @FormUrlEncoded + @POST("/portal/votes/") + suspend fun createPollVote( + @Header("Authorization") bearerToken: String, + @Field("id_hash") idHash: String, + @Field("poll_options") pollOptions: ArrayList, + ): Response } diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/dining/fragments/DiningSettingsFragment.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/dining/fragments/DiningSettingsFragment.kt index 3b950e6e8..2fa7d7c7e 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/dining/fragments/DiningSettingsFragment.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/dining/fragments/DiningSettingsFragment.kt @@ -1,5 +1,6 @@ package com.pennapps.labs.pennmobile.dining.fragments +import StudentLifeRf2 import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -11,6 +12,7 @@ import android.view.ViewGroup import android.widget.Toast import androidx.appcompat.widget.Toolbar import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope import androidx.preference.PreferenceManager import androidx.recyclerview.widget.LinearLayoutManager import com.google.firebase.crashlytics.FirebaseCrashlytics @@ -22,19 +24,21 @@ import com.pennapps.labs.pennmobile.dining.adapters.DiningSettingsAdapter import com.pennapps.labs.pennmobile.dining.classes.DiningHall import com.pennapps.labs.pennmobile.dining.classes.DiningRequest import com.pennapps.labs.pennmobile.home.classes.HomepageDataModel +import kotlinx.coroutines.launch import retrofit.ResponseCallback import retrofit.RetrofitError import retrofit.client.Response import rx.Observable class DiningSettingsFragment( - dataModel: HomepageDataModel, + private val dataModel: HomepageDataModel, ) : Fragment() { private lateinit var mActivity: MainActivity private lateinit var mStudentLife: StudentLife + private lateinit var mStudentLifeRf2: StudentLifeRf2 + private lateinit var halls: List private lateinit var toolbar: Toolbar - private val dataModel: HomepageDataModel = dataModel private var _binding: FragmentDiningPreferencesBinding? = null val binding get() = _binding!! @@ -47,7 +51,7 @@ class DiningSettingsFragment( setHasOptionsMenu(true) mActivity = activity as MainActivity mStudentLife = MainActivity.studentLifeInstance - mStudentLife = MainActivity.studentLifeInstance + mStudentLifeRf2 = MainActivity.studentLifeInstanceRf2 } override fun onCreateView( @@ -163,29 +167,30 @@ class DiningSettingsFragment( mActivity.mNetworkManager.getAccessToken { val bearerToken = "Bearer " + sp.getString(getString(R.string.access_token), "").toString() - try { - mStudentLife.sendDiningPref( - bearerToken, - DiningRequest(favoriteDiningHalls), - object : ResponseCallback() { - override fun success(response: Response) { - Log.i("Dining", "Dining preferences saved") - mActivity.onBackPressed() - } - override fun failure(error: RetrofitError) { - Log.e("Dining", "Error saving dining preferences: $error") - Toast - .makeText( - mActivity, - "Error saving dining preferences", - Toast.LENGTH_SHORT, - ).show() - } - }, - ) - } catch (e: Exception) { - e.printStackTrace() + viewLifecycleOwner.lifecycleScope.launch { + try { + val response = mStudentLifeRf2.sendDiningPref( + bearerToken, + DiningRequest(favoriteDiningHalls), + ) + + if (response.isSuccessful) { + Log.i("Dining", "Dining preferences saved") + mActivity.onBackPressed() + } else { + val error = Exception(response.body().toString()) + Log.e("Dining", "Error saving dining preferences: $error") + Toast + .makeText( + mActivity, + "Error saving dining preferences", + Toast.LENGTH_SHORT, + ).show() + } + } catch (e: Exception) { + e.printStackTrace() + } } } } diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/adapters/FitnessAdapter.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/adapters/FitnessAdapter.kt index dd04ac442..aaefc7831 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/adapters/FitnessAdapter.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/fitness/adapters/FitnessAdapter.kt @@ -82,7 +82,7 @@ class FitnessAdapter( if (hasExtraData) return room.roomId?.let { try { - studentLifeRf2.getFitnessRoomUsage(it, 3, "week")?.subscribe( + studentLifeRf2.getFitnessRoomUsage(it, 3, "week").subscribe( { roomUsage -> createBarChart(context, roomUsage!!) activity.runOnUiThread { diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/adapters/GsrReservationsAdapter.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/adapters/GsrReservationsAdapter.kt index 53305c1f4..17f4daaec 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/adapters/GsrReservationsAdapter.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/adapters/GsrReservationsAdapter.kt @@ -8,6 +8,8 @@ import android.view.ViewGroup import android.widget.Toast import android.widget.Toast.LENGTH_SHORT import androidx.appcompat.app.AlertDialog +import androidx.lifecycle.findViewTreeLifecycleOwner +import androidx.lifecycle.lifecycleScope import androidx.localbroadcastmanager.content.LocalBroadcastManager import androidx.preference.PreferenceManager import androidx.recyclerview.widget.RecyclerView @@ -16,6 +18,7 @@ import com.pennapps.labs.pennmobile.R import com.pennapps.labs.pennmobile.databinding.GsrReservationBinding import com.pennapps.labs.pennmobile.gsr.classes.GSRReservation import com.squareup.picasso.Picasso +import kotlinx.coroutines.launch import org.joda.time.format.DateTimeFormat import org.joda.time.format.DateTimeFormatter import retrofit.ResponseCallback @@ -84,49 +87,51 @@ class GsrReservationsAdapter( null } - val labs = MainActivity.studentLifeInstance - val bearerToken = - "Bearer " + sp.getString(mContext.getString(R.string.access_token), " ") - try { - labs.cancelReservation( - bearerToken, - null, - bookingID, - sessionID, - object : ResponseCallback() { - override fun success(response: Response) { - if (reservations.size > position) { - reservations.removeAt(position) - } - run { - if (reservations.size == 0) { - var intent = Intent("refresh") - LocalBroadcastManager - .getInstance(mContext) - .sendBroadcast(intent) - } else { - notifyItemRemoved(position) - } - } - } + (mContext as MainActivity).lifecycleScope.launch { + val labs = MainActivity.studentLifeInstanceRf2 + val bearerToken = + "Bearer " + sp.getString(mContext.getString(R.string.access_token), " ") + + try { + val response = labs.cancelReservation( + bearerToken, + null, + bookingID, + sessionID, + ) - override fun failure(error: RetrofitError) { - Log.e( - "GsrReservationsAdapter", - "Error canceling gsr reservation", - error, - ) - Toast - .makeText( - mContext, - "Error deleting your GSR reservation.", - LENGTH_SHORT, - ).show() + if (response.isSuccessful) { + if (reservations.size > position) { + reservations.removeAt(position) } - }, - ) - } catch (e: Exception) { - e.printStackTrace() + run { + if (reservations.size == 0) { + var intent = Intent("refresh") + LocalBroadcastManager + .getInstance(mContext) + .sendBroadcast(intent) + } else { + notifyItemRemoved(position) + } + } + } else { + val error = Exception(response.errorBody().toString()) + + Log.e( + "GsrReservationsAdapter", + "Error canceling gsr reservation", + error, + ) + Toast + .makeText( + mContext, + "Error deleting your GSR reservation.", + LENGTH_SHORT, + ).show() + } + } catch (e: Exception) { + e.printStackTrace() + } } } } diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/BookGsrFragment.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/BookGsrFragment.kt index 97171d363..c162446e5 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/BookGsrFragment.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/BookGsrFragment.kt @@ -1,5 +1,6 @@ package com.pennapps.labs.pennmobile.gsr.fragments +import StudentLifeRf2 import android.graphics.Color import android.graphics.PorterDuff import android.os.Bundle @@ -11,12 +12,14 @@ import android.widget.Button import android.widget.EditText import android.widget.Toast import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope import androidx.preference.PreferenceManager import com.pennapps.labs.pennmobile.MainActivity import com.pennapps.labs.pennmobile.R import com.pennapps.labs.pennmobile.api.StudentLife import com.pennapps.labs.pennmobile.databinding.GsrDetailsBookBinding import com.pennapps.labs.pennmobile.gsr.classes.GSRBookingResult +import kotlinx.coroutines.launch import retrofit.Callback import retrofit.RetrofitError import retrofit.client.Response @@ -36,6 +39,7 @@ class BookGsrFragment : Fragment() { private lateinit var submit: Button private lateinit var mStudentLife: StudentLife + private lateinit var mStudentLifeRf2: StudentLifeRf2 // gsr details private lateinit var gsrID: String @@ -59,6 +63,8 @@ class BookGsrFragment : Fragment() { roomName = arguments.getString("roomName") ?: "" } mStudentLife = MainActivity.studentLifeInstance + mStudentLifeRf2 = MainActivity.studentLifeInstanceRf2 + mActivity = activity as MainActivity mActivity.setTitle(R.string.gsr) } @@ -146,52 +152,50 @@ class BookGsrFragment : Fragment() { Log.i("BookGSRFragment", "ID $roomId") Log.i("BookGSRFragment", "Room Name $roomName") - try { - mStudentLife.bookGSR( - // Passing the values - bearerToken, - startTime, - endTime, - gid, - roomId, - roomName, - // Creating an anonymous callback - object : Callback { - override fun success( - result: GSRBookingResult, - response: Response, - ) { - // Displaying the output as a toast and go back to GSR fragment - if (result.getDetail().equals("success")) { - Toast.makeText(activity, "GSR successfully booked", Toast.LENGTH_LONG).show() - - // Save user info in shared preferences - val sp = PreferenceManager.getDefaultSharedPreferences(activity) - val editor = sp.edit() - editor.putString(getString(R.string.first_name), firstNameEt.text.toString()) - editor.putString(getString(R.string.last_name), lastNameEt.text.toString()) - editor.putString(getString(R.string.email_address), emailEt.text.toString()) - editor.apply() - } else { - Toast.makeText(activity, "GSR booking failed", Toast.LENGTH_LONG).show() - Log.e("BookGsrFragment", "GSR booking failed with " + result.getError()) - } - // go back to GSR fragment - binding.loading.loadingPanel.visibility = View.GONE - activity?.onBackPressed() - } - override fun failure(error: RetrofitError) { - // If any error occurred displaying the error as toast - Log.e("BookGSRFragment", "Error booking gsr", error) - Toast.makeText(activity, "An error has occurred. Please try again.", Toast.LENGTH_LONG).show() - binding.loading.loadingPanel.visibility = View.GONE - activity?.onBackPressed() + viewLifecycleOwner.lifecycleScope.launch { + try { + val response = mStudentLifeRf2.bookGSR( + // Passing the values + bearerToken, + startTime, + endTime, + gid, + roomId, + roomName, + ) + + val result = response.body() + if (response.isSuccessful && result != null) { + // Displaying the output as a toast and go back to GSR fragment + if (result.getDetail().equals("success")) { + Toast.makeText(activity, "GSR successfully booked", Toast.LENGTH_LONG).show() + + // Save user info in shared preferences + val sp = PreferenceManager.getDefaultSharedPreferences(activity) + val editor = sp.edit() + editor.putString(getString(R.string.first_name), firstNameEt.text.toString()) + editor.putString(getString(R.string.last_name), lastNameEt.text.toString()) + editor.putString(getString(R.string.email_address), emailEt.text.toString()) + editor.apply() + } else { + Toast.makeText(activity, "GSR booking failed", Toast.LENGTH_LONG).show() + Log.e("BookGsrFragment", "GSR booking failed with " + result.getError()) } - }, - ) - } catch (e: Exception) { - e.printStackTrace() + // go back to GSR fragment + binding.loading.loadingPanel.visibility = View.GONE + activity?.onBackPressed() + } else { + val error = Exception(response.errorBody().toString()) + // If any error occurred displaying the error as toast + Log.e("BookGSRFragment", "Error booking gsr", error) + Toast.makeText(activity, "An error has occurred. Please try again.", Toast.LENGTH_LONG).show() + binding.loading.loadingPanel.visibility = View.GONE + activity?.onBackPressed() + } + } catch (e: Exception) { + e.printStackTrace() + } } } } diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/GsrFragment.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/GsrFragment.kt index e813c5331..dd66e1df6 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/GsrFragment.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/GsrFragment.kt @@ -262,8 +262,8 @@ class GsrFragment : Fragment() { .isWharton( "Bearer $bearerToken", ) - ?.subscribeOn(Schedulers.io()) - ?.subscribe( + .subscribeOn(Schedulers.io()) + .subscribe( { status -> isWharton = status?.isWharton ?: false }, @@ -273,7 +273,6 @@ class GsrFragment : Fragment() { }, ) } catch (e: Exception) { - Log.i("FUCK", "manne") e.printStackTrace() } } @@ -358,8 +357,8 @@ class GsrFragment : Fragment() { gId, adjustedDateString, ) - ?.subscribeOn(Schedulers.io()) - ?.subscribe( + .subscribeOn(Schedulers.io()) + .subscribe( { gsr -> activity?.let { activity -> activity.runOnUiThread { diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/PottruckFragment.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/PottruckFragment.kt index ebe21101e..6d2e8a438 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/PottruckFragment.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/gsr/fragments/PottruckFragment.kt @@ -102,7 +102,7 @@ class PottruckFragment : Fragment() { try { - mStudentLifeRf2.getFitnessRooms()?.subscribeOn(Schedulers.io())?.subscribe({ fitnessRooms -> + mStudentLifeRf2.getFitnessRooms().subscribeOn(Schedulers.io())?.subscribe({ fitnessRooms -> val rooms = fitnessRooms?.filterNotNull().orEmpty() for (room in rooms) { Log.i("Fitness Room${room.roomId}", "${room.roomName}") @@ -122,7 +122,7 @@ class PottruckFragment : Fragment() { Log.i("IDK BRO3", Thread.currentThread().name) - mStudentLifeRf2.getFitnessPreferences(bearerToken)?.subscribe({ favorites -> + mStudentLifeRf2.getFitnessPreferences(bearerToken).subscribe({ favorites -> Log.i("IDK BRO2", Thread.currentThread().name) diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/home/HomepageViewModel.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/home/HomepageViewModel.kt index d7f9d1e7d..612819736 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/home/HomepageViewModel.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/home/HomepageViewModel.kt @@ -156,7 +156,7 @@ class HomepageViewModel : ) { if (isLoggedIn) { val latch = CountDownLatch(NUM_CELLS_LOGGED_IN) - getPolls(studentLife, bearerToken, deviceID, latch) + getPolls(studentLifeRf2, bearerToken, deviceID, latch) getNews(studentLifeRf2, latch) getCalendar(studentLifeRf2, latch) getLaundry(studentLife, bearerToken, latch) @@ -200,7 +200,7 @@ class HomepageViewModel : } private fun getPolls( - studentLife: StudentLife, + studentLife: StudentLifeRf2, bearerToken: String, deviceID: String, latch: CountDownLatch, @@ -208,8 +208,9 @@ class HomepageViewModel : val idHash = getSha256Hash(deviceID) try { studentLife.browsePolls(bearerToken, idHash).subscribe({ poll -> - if (poll.size > 0) { - val pollCell = PollCell(poll[0]) + val pollList = poll?.filterNotNull() ?: emptyList() + if (pollList.isNotEmpty()) { + val pollCell = PollCell(pollList[0]) pollCell.poll.options.forEach { pollCell.poll.totalVotes += it.voteCount } addCell(pollCell, POLL_POS) } @@ -233,8 +234,8 @@ class HomepageViewModel : ) { try { studentLife.getNews() - ?.subscribeOn(Schedulers.io()) - ?.subscribe({ article -> + .subscribeOn(Schedulers.io()) + .subscribe({ article -> val newsCell = article?.let { NewsCell(it) } ?: HomeCell() addCell(newsCell, NEWS_POS) @@ -259,8 +260,8 @@ class HomepageViewModel : ) { try { studentLife.getCalendar() - ?.subscribeOn(Schedulers.io()) - ?.subscribe({ events -> + .subscribeOn(Schedulers.io()) + .subscribe({ events -> val calendarCell = events?.let { CalendarCell(it.filterNotNull()) } ?: HomeCell() Log.i(TAG, "Loaded calendar") @@ -338,8 +339,8 @@ class HomepageViewModel : ) { try { studentLife.getDiningPreferences(bearerToken) - ?.subscribeOn(Schedulers.io()) - ?.subscribe({ preferences -> + .subscribeOn(Schedulers.io()) + .subscribe({ preferences -> val venues = preferences?.preferences ?.mapNotNull { it.id } ?.toMutableList() diff --git a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/home/adapters/HomeAdapter.kt b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/home/adapters/HomeAdapter.kt index fda496486..bfb4a8372 100644 --- a/PennMobile/src/main/java/com/pennapps/labs/pennmobile/home/adapters/HomeAdapter.kt +++ b/PennMobile/src/main/java/com/pennapps/labs/pennmobile/home/adapters/HomeAdapter.kt @@ -73,6 +73,7 @@ import com.pennapps.labs.pennmobile.utils.Utils import eightbitlab.com.blurview.RenderScriptBlur import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import retrofit.ResponseCallback import retrofit.RetrofitError import retrofit.client.Response @@ -256,7 +257,7 @@ class HomeAdapter( holder.homeRv.layoutParams = params try { - mStudentLifeRf2.roomObservable(roomID)?.subscribeOn(Schedulers.io())?.subscribe({ room -> + mStudentLifeRf2.roomObservable(roomID).subscribeOn(Schedulers.io())?.subscribe({ room -> mActivity.runOnUiThread { holder.homeTitle.text = room?.name ?: "" val rooms = room?.let { arrayListOf(it) } ?: arrayListOf() @@ -384,11 +385,13 @@ class HomeAdapter( var accentColor: Int = getColor(mContext, R.color.black) mActivity.lifecycleScope.launch(Dispatchers.Default) { val bitmap = - Glide - .with(mContext) - .load(post.imageUrl) - .submit() - .get() + withContext(Dispatchers.IO) { + Glide + .with(mContext) + .load(post.imageUrl) + .submit() + .get() + } .toBitmap() // Create palette from bitmap @@ -430,7 +433,7 @@ class HomeAdapter( .setFrameClearDrawable(ColorDrawable(getColor(mContext, R.color.white))) .setBlurRadius(25f) /** Post clicking logic if there exists a URL **/ - val url = post?.postUrl ?: return + val url = post.postUrl ?: return holder.homePostCard.setOnClickListener { val connection = NewsCustomTabsServiceConnection() builder = CustomTabsIntent.Builder() @@ -520,23 +523,23 @@ class HomeAdapter( val bearerToken = "Bearer " + sp.getString(mContext.getString(R.string.access_token), " ") - try { - mStudentLife.createPollVote( - bearerToken, - idHash, - selectedOptions, - object : ResponseCallback() { - override fun success(response: Response?) { - Log.i("HomeAdapter", "Successfully voted for poll!") - } - - override fun failure(error: RetrofitError?) { - Log.e("HomeAdapter", "Error voting for poll", error) - } - }, - ) - } catch (e: Exception) { - e.printStackTrace() + (mContext as MainActivity).lifecycleScope.launch { + try { + val response = mStudentLifeRf2.createPollVote( + bearerToken, + idHash, + selectedOptions, + ) + + if (response.isSuccessful) { + Log.i("HomeAdapter", "Successfully voted for poll!") + } else { + val error = Exception(response.errorBody()?.string() ?: "Unknown Error") + Log.e("HomeAdapter", "Error voting for poll", error) + } + } catch (e: Exception) { + e.printStackTrace() + } } } } @@ -582,7 +585,7 @@ class HomeAdapter( Glide .with(mContext) - .load(article?.imageUrl) + .load(article.imageUrl) .fitCenter() .centerCrop() .into(holder.homeNewsImageView) @@ -591,11 +594,13 @@ class HomeAdapter( var accentColor: Int = getColor(mContext, R.color.black) mActivity.lifecycleScope.launch(Dispatchers.Default) { val bitmap = - Glide - .with(mContext) - .load(article?.imageUrl) - .submit() - .get() + withContext(Dispatchers.IO) { + Glide + .with(mContext) + .load(article.imageUrl) + .submit() + .get() + } .toBitmap() // Create palette from bitmap