Skip to content

Commit

Permalink
Add code for updating preferences. Also update the adapter to work wi…
Browse files Browse the repository at this point in the history
…th the view model.
  • Loading branch information
meiron03 committed Mar 21, 2024
1 parent 23faabc commit ca635d6
Show file tree
Hide file tree
Showing 5 changed files with 265 additions and 280 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,20 @@ import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
import androidx.preference.PreferenceManager
import android.util.Log
import android.view.*
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction
import androidx.fragment.app.viewModels
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.pennapps.labs.pennmobile.adapters.LaundryRoomAdapter
import com.pennapps.labs.pennmobile.api.OAuth2NetworkManager
import com.pennapps.labs.pennmobile.classes.LaundryRoom
import com.pennapps.labs.pennmobile.classes.LaundryUsage
import com.pennapps.labs.pennmobile.components.collapsingtoolbar.ToolbarBehavior
import com.pennapps.labs.pennmobile.databinding.FragmentLaundryBinding
import com.pennapps.labs.pennmobile.utils.Utils
import com.pennapps.labs.pennmobile.viewmodels.LaundryViewModel
import kotlinx.android.synthetic.main.loading_panel.*
import kotlinx.android.synthetic.main.loading_panel.view.*
import kotlinx.android.synthetic.main.no_results.*
import java.util.*

class LaundryFragment : Fragment() {
Expand All @@ -39,16 +34,13 @@ class LaundryFragment : Fragment() {
private var laundryRooms = ArrayList<LaundryRoom>()
// data for laundry room usage
private var roomsData: ArrayList<LaundryUsage> = ArrayList()
private val maxRooms = 3

private var mAdapter: LaundryRoomAdapter? = null

private var numRooms: Int = 0

private var _binding : FragmentLaundryBinding? = null
private val binding get() = _binding!!

private val laundryViewModel : LaundryViewModel by viewModels()
private val laundryViewModel : LaundryViewModel by activityViewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

Expand Down Expand Up @@ -97,7 +89,7 @@ class LaundryFragment : Fragment() {
laundryRooms.addAll(favorites.favoriteRooms)
roomsData.addAll(favorites.roomsData)

for (pos in 0 until maxRooms) {
for (pos in 0 until LaundryViewModel.maxNumRooms) {
mAdapter!!.notifyItemChanged(pos)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,42 +5,37 @@ import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
import android.view.*
import android.widget.Button
import android.widget.RelativeLayout
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.preference.PreferenceManager
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.pennapps.labs.pennmobile.adapters.LaundrySettingsAdapter
import com.pennapps.labs.pennmobile.classes.LaundryRoomSimple
import com.pennapps.labs.pennmobile.databinding.FragmentLaundrySettingsBinding
import com.pennapps.labs.pennmobile.viewmodels.LaundryViewModel
import kotlinx.android.synthetic.main.include_main.*
import kotlinx.android.synthetic.main.loading_panel.*
import kotlinx.android.synthetic.main.no_results.*
import java.util.ArrayList
import java.util.HashMap

class LaundrySettingsFragment : Fragment() {

private lateinit var mActivity: MainActivity
private lateinit var mStudentLife: StudentLife
private lateinit var mContext: Context
internal var mHelpLayout: RelativeLayout? = null

private var sp: SharedPreferences? = null
private var mButton: Button? = null

private var numRooms: Int = 0

private var _binding : FragmentLaundrySettingsBinding? = null
private val binding get() = _binding!!

private val laundryViewModel : LaundryViewModel by activityViewModels()
private lateinit var sharedPreferences: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mStudentLife = MainActivity.studentLifeInstance
mActivity = activity as MainActivity

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mActivity)

mContext = mActivity
mActivity.closeKeyboard()
//setHasOptionsMenu(true)
mActivity.toolbar.visibility = View.VISIBLE
mActivity.hideBottomBar()
}
Expand All @@ -49,95 +44,40 @@ class LaundrySettingsFragment : Fragment() {
_binding = FragmentLaundrySettingsBinding.inflate(inflater, container, false)
val view = binding.root

// set up shared preferences
sp = PreferenceManager.getDefaultSharedPreferences(mContext)

// reset laundry rooms button
mButton = binding.laundryRoomReset
mButton?.setOnClickListener {
// remove shared preferences
val editor = sp?.edit()
editor?.putInt(getString(R.string.num_rooms_selected_pref), 0)
editor?.apply()

for (i in 0 until numRooms) {
editor?.remove(i.toString())?.apply()
}
}

// set up back button
mActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true)

getHalls()
return view
}


private fun getHalls() {
mStudentLife.laundryRooms()
.subscribe({ rooms ->
mActivity.runOnUiThread {
numRooms = rooms.size
// save number of rooms
val editor = sp?.edit()
editor?.putInt(getString(R.string.num_rooms_pref), numRooms)
editor?.apply()

val hashMap = HashMap<String, List<LaundryRoomSimple>>()
val hallList = ArrayList<String>()

var i = 0
// go through all the rooms
while (i < numRooms) {

// new list for the rooms in the hall
var roomList: MutableList<LaundryRoomSimple> = ArrayList()

// if hall name already exists, get the list of rooms and add to that
var hallName = rooms[i].location ?: ""

if (hallList.contains(hallName)) {
roomList = hashMap[hallName] as MutableList<LaundryRoomSimple>
hashMap.remove(hallName)
hallList.remove(hallName)
}

while (hallName == rooms[i].location) {
roomList.add(rooms[i])

i += 1
if (i >= rooms.size) {
break
}
}

// name formatting for consistency
if (hallName == "Lauder College House") {
hallName = "Lauder"
}

// add the hall name to the list
hallList.add(hallName)
hashMap[hallName] = roomList
}

val mAdapter = LaundrySettingsAdapter(mContext, hashMap, hallList)
try {
binding.laundryBuildingExpandableList.setAdapter(mAdapter)
} catch (e: Exception) {
FirebaseCrashlytics.getInstance().recordException(e)
}

loadingPanel?.visibility = View.GONE
no_results?.visibility = View.GONE
}
}, {
mActivity.runOnUiThread {
loadingPanel?.visibility = View.GONE
no_results?.visibility = View.VISIBLE
mHelpLayout?.visibility = View.GONE
}
})
private fun attachAdapter() {
val mAdapter = LaundrySettingsAdapter(mContext, laundryViewModel)
try {
binding.laundryBuildingExpandableList.setAdapter(mAdapter)
} catch (e: Exception) {
FirebaseCrashlytics.getInstance().recordException(e)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
loadingPanel?.visibility = View.VISIBLE

// if this value is already true, then simply attach adapter
if (laundryViewModel.loadedRooms.value!!) {
attachAdapter()
loadingPanel?.visibility = View.GONE
no_results?.visibility = View.GONE
} else {
// otherwise, wait until the network request is done
laundryViewModel.loadedRooms.observe(viewLifecycleOwner) { loaded ->
if (loaded) {
attachAdapter()
loadingPanel?.visibility = View.GONE
no_results?.visibility = View.GONE
}
}
laundryViewModel.getHalls(mStudentLife)
}
}

override fun onResume() {
Expand All @@ -149,6 +89,13 @@ class LaundrySettingsFragment : Fragment() {

override fun onDestroyView() {
super.onDestroyView()
if (laundryViewModel.existsDiff()) {
mActivity.mNetworkManager.getAccessToken {
val bearerToken = "Bearer " + sharedPreferences
.getString(getString(R.string.access_token), "").toString()
laundryViewModel.setFavoritesFromToggled(mStudentLife, bearerToken)
}
}
mActivity.supportActionBar?.setDisplayHomeAsUpEnabled(false)
mActivity.toolbar.visibility = View.GONE
_binding = null
Expand Down
Loading

0 comments on commit ca635d6

Please sign in to comment.