Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…android into subletting
  • Loading branch information
vavali08 committed Jan 21, 2024
2 parents 960301e + 8f18955 commit 7280ee5
Show file tree
Hide file tree
Showing 11 changed files with 554 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import androidx.fragment.app.FragmentTransaction
import com.google.firebase.analytics.FirebaseAnalytics
import com.pennapps.labs.pennmobile.api.StudentLife
import com.pennapps.labs.pennmobile.databinding.FragmentGsrBinding
import com.pennapps.labs.pennmobile.databinding.FragmentSubletteeViewBinding
import org.joda.time.DateTime

// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
Expand All @@ -19,16 +26,49 @@ private const val ARG_PARAM2 = "param2"
class SubletteeFragment : Fragment() {


//create binding
private var _binding : FragmentSubletteeViewBinding? = null
private val binding get() = _binding!!

//api manager
private lateinit var mStudentLife: StudentLife

private lateinit var mActivity: MainActivity

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

val bundle = Bundle()

//edit this later for firebase
/* bundle.putString(FirebaseAnalytics.Param.ITEM_ID, "0")
bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, "GSR")
bundle.putString(FirebaseAnalytics.Param.ITEM_CATEGORY, "App Feature")
FirebaseAnalytics.getInstance(mActivity).logEvent(FirebaseAnalytics.Event.VIEW_ITEM, bundle) */

}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_sublettee_view, container, false)
_binding = FragmentSubletteeViewBinding.inflate(inflater, container, false)
return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

val marketplaceButton: Button = view.findViewById(R.id.sublettee_enter_subletting_button)

marketplaceButton.setOnClickListener {
//load new fragment, which will hold the subletting marketplace in whole
mActivity.supportFragmentManager.beginTransaction()
.replace(((view as ViewGroup).parent as View).id, SubletteeMarketplace())
.addToBackStack(null)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
package com.pennapps.labs.pennmobile

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.Spinner
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.pennapps.labs.pennmobile.adapters.SublettingListAdapter
import com.pennapps.labs.pennmobile.api.StudentLife
import com.pennapps.labs.pennmobile.classes.SublettingModel
import com.pennapps.labs.pennmobile.databinding.FragmentSubletteeMarketplaceBinding
import java.time.LocalDate

/**
* A simple [Fragment] subclass.
* Use the [SubletteeMarketplace.newInstance] factory method to
* create an instance of this fragment.
*/
class SubletteeMarketplace : Fragment() {


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

//spinner adapter

private lateinit var sortByAdapter: ArrayAdapter<String>
private lateinit var sortBySpinner: Spinner

//recyclerview adapters and layout manager
lateinit var sublettingRecyclerView: RecyclerView
lateinit var newLayoutManager: GridLayoutManager
lateinit var sublettingList: ArrayList<SublettingModel>
lateinit var myAdapter: SublettingListAdapter

//api manager
private lateinit var mStudentLife: StudentLife

private lateinit var mActivity: MainActivity

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

val bundle = Bundle()
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
container?.removeAllViews()
_binding = FragmentSubletteeMarketplaceBinding.inflate(inflater, container, false)
return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
sortByAdapter = ArrayAdapter(mActivity, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, arrayOf("Price", "Location"))
sortBySpinner = binding.subletteeMarketplaceSort
sortBySpinner.adapter = sortByAdapter

sublettingRecyclerView = binding.subletteeMarketplaceList
newLayoutManager = GridLayoutManager(context, 2, LinearLayoutManager.VERTICAL, false)
sublettingRecyclerView.layoutManager = newLayoutManager

//delete for later, testing
sublettingRecyclerView.setHasFixedSize(true)
sublettingList = setUpData()

myAdapter = SublettingListAdapter(context, sublettingList)
sublettingRecyclerView.adapter = myAdapter
}

//function to put in fake data- will get rid of once I get backend data in
private fun setUpData(): ArrayList<SublettingModel> {

var sublettingList = ArrayList<SublettingModel>()

val sublettingImages = intArrayOf(
R.drawable.dining_gourmet_grocer,
R.drawable.dining_hillel,
R.drawable.dining_mcclelland,
R.drawable.dining_kceh,
R.drawable.dining_commons
)

val sublettingNames = arrayOf(
"The Radian",
"The Chestnut",
"Axis",
"The Radian",
"The Speakeasy"
)

val sublettingPrices = intArrayOf(
900,
1000,
1200,
500,
400
)

val sublettingNegotiablePrices = arrayOf(
true,
false,
true,
true,
false
)

val sublettingBedrooms = arrayOf(
2,
3,
1,
4,
10
)

val sublettingBathrooms = arrayOf(
10,
5,
0,
1,
3
)

for (i in sublettingImages.indices)
sublettingList.add(SublettingModel(sublettingImages[i], sublettingNames[i],
sublettingPrices[i], sublettingNegotiablePrices[i], sublettingBedrooms[i],
sublettingBathrooms[i], 2, 2))

return sublettingList


}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ import com.pennapps.labs.pennmobile.adapters.SublettingPagerAdapter
import com.pennapps.labs.pennmobile.components.collapsingtoolbar.ToolbarBehavior
import kotlinx.android.synthetic.main.fragment_dining_holder.view.appbar_home_holder
import com.google.android.material.tabs.TabLayoutMediator
import com.pennapps.labs.pennmobile.adapters.DiningPagerAdapter
import com.pennapps.labs.pennmobile.databinding.FragmentDiningHolderBinding
import com.pennapps.labs.pennmobile.databinding.FragmentSublettingBinding


/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.pennapps.labs.pennmobile.adapters

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.pennapps.labs.pennmobile.R
import com.pennapps.labs.pennmobile.classes.SublettingModel

class SublettingListAdapter(var ctx: android.content.Context?, var sublettingList: ArrayList<SublettingModel>):
RecyclerView.Adapter<SublettingListAdapter.SublettingCardViewHolder>() {

class SublettingCardViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
var listingImage = itemView.findViewById<ImageView>(R.id.subletting_cardview_image)
var listingTitle = itemView.findViewById<TextView>(R.id.subletting_cardview_title)
var listingPrice = itemView.findViewById<TextView>(R.id.subletting_cardview_price)
var listingRooms = itemView.findViewById<TextView>(R.id.subletting_cardview_rooms)
var listingDates = itemView.findViewById<TextView>(R.id.subletting_cardview_dates)

}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SublettingCardViewHolder {
val newView = LayoutInflater.from(parent.context).inflate(R.layout.subletting_cardview, parent, false)
return SublettingCardViewHolder(newView)
}

override fun onBindViewHolder(holder: SublettingCardViewHolder, position: Int) {
var mSublettingCard: SublettingModel = sublettingList[position]
holder.listingImage.setImageResource(mSublettingCard.listingImage!!)
holder.listingTitle.text = mSublettingCard.listingTitle

//price, adding negotiable if price is negotiable
var price = "$" + mSublettingCard.listingPrice.toString()
if (mSublettingCard.isNegotiable == true) {
price += " (negotiable)"
}
holder.listingPrice.text = price

val rooms = mSublettingCard.numberBeds.toString() + " bd | " +
mSublettingCard.numberBath.toString() + " ba"
holder.listingRooms.text = rooms
}

override fun getItemCount(): Int {
return sublettingList.size
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.pennapps.labs.pennmobile.classes

import java.util.Date

class SublettingModel {

var listingImage: Int?
var listingTitle: String?
var listingPrice: Int?
var isNegotiable: Boolean?
var numberBeds: Int?
var numberBath: Int?
var startDate: Int?
var endDate: Int?

constructor(listingImage: Int, listingTitle: String, listingPrice: Int, isNegotiable: Boolean,
numberBeds: Int, numberBath: Int, startDate: Int, endDate: Int) {
this.listingImage = listingImage
this.listingTitle = listingTitle
this.listingPrice = listingPrice
this.isNegotiable = isNegotiable
this.numberBeds = numberBeds
this.numberBath = numberBath
this.startDate = startDate
this.endDate = endDate
}
}
Binary file added PennMobile/src/main/res/drawable/bookmark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions PennMobile/src/main/res/drawable/ic_filter_gray.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#808080"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M10,18h4v-2h-4v2zM3,6v2h18L21,6L3,6zM6,13h12v-2L6,11v2z"/>
</vector>
85 changes: 85 additions & 0 deletions PennMobile/src/main/res/layout/fragment_sublettee_marketplace.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/sublettee_marketplace_search_settings"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@color/color_background"
android:elevation="2dp"
app:layout_constraintTop_toTopOf="parent">

<ImageButton
android:id="@+id/sublettee_marketplace_saved"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="20dp"
android:background="@android:color/transparent"
android:minWidth="0dp"
android:src="@drawable/star"
app:layout_constraintStart_toStartOf="@+id/sublettee_marketplace_search_settings"
app:layout_constraintTop_toTopOf="parent"/>

<android.widget.SearchView
android:id="@+id/sublettee_marketplace_search"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
app:layout_constraintStart_toEndOf="@id/sublettee_marketplace_saved"
app:layout_constraintTop_toTopOf="@id/sublettee_marketplace_saved"/>

<ImageButton
android:id="@+id/sublettee_marketplace_filter"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="20dp"
android:background="@android:color/transparent"
android:minWidth="0dp"
android:src="@drawable/ic_filter_gray"
app:layout_constraintStart_toEndOf="@+id/sublettee_marketplace_search"
app:layout_constraintTop_toTopOf="@id/sublettee_marketplace_saved" />

<TextView
android:id="@+id/sublettee_marketplace_sort_by_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sort By"
android:layout_marginStart="100dp"
app:layout_constraintStart_toStartOf="@id/sublettee_marketplace_search"
app:layout_constraintTop_toTopOf="@id/sublettee_marketplace_sort"
app:layout_constraintBottom_toBottomOf="@id/sublettee_marketplace_sort"/>

<Spinner
android:id="@+id/sublettee_marketplace_sort"
android:layout_width="150dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toEndOf="@id/sublettee_marketplace_sort_by_text"
app:layout_constraintTop_toBottomOf="@id/sublettee_marketplace_filter"/>

</androidx.constraintlayout.widget.ConstraintLayout>

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/sublettee_refresh_layout"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/sublettee_marketplace_search_settings"
app:layout_constraintVertical_bias="1.0">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/sublettee_marketplace_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none" />

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
Loading

0 comments on commit 7280ee5

Please sign in to comment.