app/src/main/java/ch/epfl/sdp/drone3d/ui/mission/MissionViewAdapter.kt
/*
* Copyright (C) 2021 Drone3D-Team
* The license can be found in LICENSE at root of the repository
*/
package ch.epfl.sdp.drone3d.ui.mission
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.cardview.widget.CardView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import ch.epfl.sdp.drone3d.R
import ch.epfl.sdp.drone3d.model.mission.MappingMission
import ch.epfl.sdp.drone3d.model.mission.State
/**
* Adapter for the Recycler view creating holders for the missions. [privateList] indicates whether
* the adapter is used to show the private or the public missions.
*/
class MissionViewAdapter(private val privateList: Boolean) :
ListAdapter<MappingMission, MissionViewAdapter.MissionViewHolder>(MissionDiff) {
companion object {
const val OWNER_ID_INTENT_PATH = "MVA_owner"
const val PRIVATE_ID_INTENT_PATH = "MVA_private"
const val SHARED_ID_INTENT_PATH = "MVA_shared"
const val STRATEGY_INTENT_PATH = "MVA_strategy"
const val AREA_INTENT_PATH = "MVA_area"
const val FLIGHT_HEIGHT_INTENT_PATH = "MVA_flightHeight"
}
class MissionViewHolder(view: View, private val privateList: Boolean) :
RecyclerView.ViewHolder(view) {
private val textView: TextView = view.findViewById(R.id.mapping_selection_item_text)
private val cardView: CardView = view.findViewById(R.id.mapping_selection_item_button)
private var curMission: MappingMission? = null
init {
cardView.setOnClickListener {
curMission?.let { mission ->
val intent = Intent(view.context, ItineraryShowActivity::class.java)
intent.putExtra(FLIGHT_HEIGHT_INTENT_PATH, mission.flightHeight)
intent.putExtra(AREA_INTENT_PATH, ArrayList(mission.area))
intent.putExtra(STRATEGY_INTENT_PATH, mission.strategy)
intent.putExtra(OWNER_ID_INTENT_PATH, mission.ownerUid)
intent.putExtra(PRIVATE_ID_INTENT_PATH, mission.privateId)
intent.putExtra(SHARED_ID_INTENT_PATH, mission.sharedId)
view.context.startActivity(intent)
}
}
}
// Bind holder with a mission -> set the name
fun bind(mission: MappingMission) {
curMission = mission
textView.text = mission.name
if (mission.state == State.PRIVATE_AND_SHARED) {
if(privateList) {
textView.setCompoundDrawablesWithIntrinsicBounds(
R.drawable.ic_shared_private,
0,
0,
0
)
}
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MissionViewHolder {
// Create a new view, which defines the UI of the list item
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.mission_selection_item, parent, false)
return MissionViewHolder(view, privateList)
}
override fun onBindViewHolder(holder: MissionViewHolder, position: Int) {
holder.bind(getItem(position))
}
object MissionDiff : DiffUtil.ItemCallback<MappingMission>() {
override fun areItemsTheSame(oldItem: MappingMission, newItem: MappingMission): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(oldItem: MappingMission, newItem: MappingMission): Boolean {
return oldItem.name == newItem.name && oldItem.state == newItem.state
}
}
}