Skip to content

Commit

Permalink
Add fitness (currently replaces PCA) with bar chart for room usage.
Browse files Browse the repository at this point in the history
  • Loading branch information
meiron03 committed Apr 13, 2023
1 parent b53bd0f commit 8423916
Show file tree
Hide file tree
Showing 20 changed files with 1,049 additions and 163 deletions.
3 changes: 1 addition & 2 deletions PennMobile/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,14 @@ dependencies {
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'com.google.maps:google-maps-services:0.13.0'
implementation 'org.jsoup:jsoup:1.13.1'
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.percentlayout:percentlayout:1.0.0'
implementation 'androidx.exifinterface:exifinterface:1.2.0'
implementation 'androidx.preference:preference-ktx:1.1.1'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'joda-time:joda-time:2.10.6'
implementation 'org.apache.commons:commons-lang3:3.10'
implementation 'com.google.android.material:material:1.1.0'
implementation 'com.google.android.material:material:1.2.0'
implementation 'com.jakewharton:butterknife:10.2.1'
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ class DiningHolderFragment : Fragment() {
super.onCreate(savedInstanceState)
mActivity = activity as MainActivity
mActivity.closeKeyboard()

}

@RequiresApi(Build.VERSION_CODES.M)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,30 +68,6 @@ class FitnessFragment : Fragment() {
internetConnectionFitness?.visibility = View.GONE
}

// get API data
val labs = MainActivity.studentLifeInstance
labs.gymData.subscribe({ gyms ->
mActivity.runOnUiThread {
gym_list?.adapter = FitnessAdapter(gyms)
// get rid of loading screen
loadingPanel?.visibility = View.GONE
if (gyms.size > 0) {
no_results?.visibility = View.GONE
} else {
no_results?.visibility = View.VISIBLE
}
// stop refreshing
gym_refresh_layout?.isRefreshing = false
}
}, { throwable ->
mActivity.runOnUiThread {
throwable.printStackTrace()
Toast.makeText(activity, "Could not load gym information", Toast.LENGTH_LONG).show()
loadingPanel?.visibility = View.GONE
no_results?.visibility = View.VISIBLE
gym_refresh_layout?.isRefreshing = false
}
})
}

override fun onResume() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package com.pennapps.labs.pennmobile

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.fragment.app.Fragment
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.pennapps.labs.pennmobile.adapters.FitnessPagerAdapter
import com.pennapps.labs.pennmobile.components.collapsingtoolbar.ToolbarBehavior
import com.pennapps.labs.pennmobile.utils.Utils

import kotlinx.android.synthetic.main.fragment_fitness_holder.pager
import kotlinx.android.synthetic.main.fragment_fitness_holder.tabLayout

class FitnessHolderFragment: Fragment() {
private lateinit var mActivity : MainActivity
private lateinit var mView : View
private lateinit var pagerAdapter : FitnessPagerAdapter

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mActivity = activity as MainActivity
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_fitness_holder, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mView = view
// initialize app bar and swipe refresh
initAppBar()

pagerAdapter = FitnessPagerAdapter(this)
pager?.adapter = pagerAdapter
pager.isUserInputEnabled = false
TabLayoutMediator(tabLayout, pager) { tab, position ->
if (position == 0) {
tab.text = "Pottruck"
} else {
tab.text = "Other Facilities"
}
}.attach()
}

/**
* Initialize the app bar of the fragment and
* fills in the textViews for the title/date
*/
private fun initAppBar() {
val appBarLayout : AppBarLayout = mView.findViewById(R.id.appbar_home_holder);
val titleView : TextView = mView.findViewById(R.id.title_view)
val dateView : TextView = mView.findViewById(R.id.date_view)

(appBarLayout.layoutParams as CoordinatorLayout.LayoutParams).behavior = ToolbarBehavior()
titleView.text = getString(R.string.fitness)
dateView.text = Utils.getCurrentSystemTime()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ class MainActivity : AppCompatActivity() {
fragment = HomeFragment()
}
"Dining" -> fragment = DiningHolderFragment()
"PCA" -> fragment = PennCourseAlertHolderFragment()
"PCA" -> fragment = FitnessHolderFragment()
"GSR" -> fragment = GsrTabbedFragment()
"Laundry" -> fragment = LaundryFragment()
"More" -> fragment = MoreFragment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ class PennCourseAlertCreateAlertFragment : Fragment() {
// hideInternetErrorBar(view)
}


val sp = PreferenceManager.getDefaultSharedPreferences(activity)
val pennKey = sp.getString(getString(R.string.pennkey), null)
val bearerToken = "Bearer " + sp.getString(getString(R.string.access_token), "").toString()
Expand All @@ -80,9 +79,10 @@ class PennCourseAlertCreateAlertFragment : Fragment() {
viewModel.userInfo.observe(viewLifecycleOwner, Observer {
val formattedPhoneNumber = viewModel.userInfo.value?.profile?.phone?.drop(2)
val email = viewModel.userInfo.value?.profile?.email

phoneNumberEditText.text =
Editable.Factory.getInstance().newEditable(formattedPhoneNumber)
emailEditText.text = Editable.Factory.getInstance().newEditable(email)
Editable.Factory.getInstance().newEditable(formattedPhoneNumber?: "")
emailEditText.text = Editable.Factory.getInstance().newEditable(email?: "")
})

val alertButton = view.findViewById<Button>(R.id.pca_alert_button)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package com.pennapps.labs.pennmobile

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.pennapps.labs.pennmobile.adapters.FitnessAdapter
import com.pennapps.labs.pennmobile.api.StudentLife

class PottruckFragment : Fragment() {
private lateinit var mActivity : MainActivity
private lateinit var mStudentLife : StudentLife

private lateinit var mView: View
private lateinit var swipeRefresh : SwipeRefreshLayout
private lateinit var recyclerView : RecyclerView
private lateinit var loadingPanel : View

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mStudentLife = MainActivity.studentLifeInstance
mActivity = activity as MainActivity
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_pottruck, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mView = view

swipeRefresh = view.findViewById(R.id.swiperefresh_fitness)
recyclerView = view.findViewById(R.id.recycler_view_fitness_rooms)
loadingPanel = view.findViewById(R.id.loadingPanel)

swipeRefresh.setColorSchemeResources(R.color.color_accent, R.color.color_primary)
recyclerView.layoutManager = LinearLayoutManager(mActivity, LinearLayoutManager.VERTICAL, false)
swipeRefresh.setOnRefreshListener { getFitnessRooms() }

getFitnessRooms()
}

private fun getFitnessRooms() {
//displays banner if not connected
if (!getConnected()) return

mStudentLife.getFitnessRooms()
.subscribe({ fitnessRooms ->
for (room in fitnessRooms) {
Log.i("Fitness Room${room.roomId}", "${room.roomName}")
}
mActivity.runOnUiThread {
val adapter = FitnessAdapter(fitnessRooms)
recyclerView.adapter = adapter
loadingPanel.visibility = View.GONE
swipeRefresh.isRefreshing = false
}
}, {
Log.e("PottruckFragment", "Error getting fitness rooms", it)
mActivity.runOnUiThread {
Log.e("Fitness", "Could not load Pottruck page", it)
loadingPanel.visibility = View.GONE
swipeRefresh.isRefreshing = false
}
})
}

/**
* Checks if app is connected to internet. If not, it displays a banner
* @return true if connected to internet and false otherwise
*/
private fun getConnected(): Boolean {
//displays banner if not connected
val connectionToolbar : Toolbar = mView.findViewById(R.id.toolbar_fitness_connection)
val connectionMessage : TextView = mView.findViewById(R.id.text_fitness_connection_message)

if (!isOnline(context)) {
connectionToolbar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.darkRedBackground))
connectionMessage.text = getString(R.string.internet_error)
connectionToolbar.visibility = View.VISIBLE
loadingPanel.visibility = View.GONE
return false
}
connectionToolbar.visibility = View.GONE
return true
}
}
Loading

0 comments on commit 8423916

Please sign in to comment.