mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Optimized PassesAdapter and ViewHolders
This commit is contained in:
1 parent
0ba26d4d75
commit
4e0aa1481b
2 files changed
+38
-40
No files matched your search
@@ -33,14 +33,18 @@ import com.rtbishop.look4sat.ui.fragments.PassesFragmentDirections
|
|||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class PassesAdapter(private var satPassList: MutableList<SatPass> = mutableListOf()) :
|
class PassesAdapter(context: Context, private var shouldUseUTC: Boolean = false) :
|
||||||
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||||
|
|
||||||
private var shouldUseUTC: Boolean = false
|
private val satIdFormat = context.getString(R.string.pass_satId)
|
||||||
|
private val azFormat = context.getString(R.string.pat_azimuth)
|
||||||
fun setShouldUseUTC(boolean: Boolean) {
|
private val elevFormat = context.getString(R.string.pat_elevation)
|
||||||
shouldUseUTC = boolean
|
private val aosAzFormat = context.getString(R.string.pass_aos_az)
|
||||||
}
|
private val losAzFormat = context.getString(R.string.pass_los_az)
|
||||||
|
private val dateFormat = context.getString(R.string.pass_dateTime)
|
||||||
|
private val timeZoneUTC = TimeZone.getTimeZone("UTC")
|
||||||
|
private val simpleDateFormat = SimpleDateFormat(dateFormat, Locale.getDefault())
|
||||||
|
private var satPassList: MutableList<SatPass> = mutableListOf()
|
||||||
|
|
||||||
fun setList(list: MutableList<SatPass>) {
|
fun setList(list: MutableList<SatPass>) {
|
||||||
satPassList = list
|
satPassList = list
|
||||||
@@ -48,18 +52,18 @@ class PassesAdapter(private var satPassList: MutableList<SatPass> = mutableListO
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun updateRecycler() {
|
fun updateRecycler() {
|
||||||
val timeNow = Date()
|
val timeNow = System.currentTimeMillis()
|
||||||
val iterator = satPassList.listIterator()
|
val iterator = satPassList.listIterator()
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
val satPass = iterator.next()
|
val satPass = iterator.next()
|
||||||
if (satPass.progress < 100) {
|
if (satPass.progress < 100) {
|
||||||
val timeStart = satPass.pass.startTime
|
val timeStart = satPass.pass.startTime.time
|
||||||
val timeEnd = satPass.pass.endTime
|
val timeEnd = satPass.pass.endTime.time
|
||||||
if (timeNow.after(timeStart)) {
|
if (timeNow.minus(timeStart) > 0) {
|
||||||
satPass.active = true
|
satPass.active = true
|
||||||
val index = satPassList.indexOf(satPass)
|
val index = satPassList.indexOf(satPass)
|
||||||
val deltaTotal = timeEnd.time.minus(timeStart.time)
|
val deltaTotal = timeEnd.minus(timeStart)
|
||||||
val deltaNow = timeNow.time.minus(timeStart.time)
|
val deltaNow = timeNow.minus(timeStart)
|
||||||
satPass.progress = ((deltaNow.toFloat() / deltaTotal.toFloat()) * 100).toInt()
|
satPass.progress = ((deltaNow.toFloat() / deltaTotal.toFloat()) * 100).toInt()
|
||||||
notifyItemChanged(index)
|
notifyItemChanged(index)
|
||||||
}
|
}
|
||||||
@@ -104,26 +108,21 @@ class PassesAdapter(private var satPassList: MutableList<SatPass> = mutableListO
|
|||||||
RecyclerView.ViewHolder(itemView) {
|
RecyclerView.ViewHolder(itemView) {
|
||||||
|
|
||||||
fun bind(satPass: SatPass) {
|
fun bind(satPass: SatPass) {
|
||||||
val context: Context = itemView.context
|
binding.apply {
|
||||||
if (satPass.active) binding.passLeoImg.setImageResource(R.drawable.ic_pass_active)
|
if (satPass.active) passLeoImg.setImageResource(R.drawable.ic_pass_active)
|
||||||
else binding.passLeoImg.setImageResource(R.drawable.ic_pass_inactive)
|
else passLeoImg.setImageResource(R.drawable.ic_pass_inactive)
|
||||||
|
|
||||||
binding.passLeoSatName.text = satPass.tle.name
|
passLeoSatName.text = satPass.tle.name
|
||||||
binding.passLeoSatId.text =
|
passLeoSatId.text = String.format(satIdFormat, satPass.tle.catnum)
|
||||||
String.format(context.getString(R.string.pass_satId), satPass.tle.catnum)
|
passLeoMaxEl.text = String.format(elevFormat, satPass.pass.maxEl)
|
||||||
binding.passLeoMaxEl.text =
|
passLeoAosAz.text = String.format(aosAzFormat, satPass.pass.aosAzimuth)
|
||||||
String.format(context.getString(R.string.pat_elevation), satPass.pass.maxEl)
|
passLeoLosAz.text = String.format(losAzFormat, satPass.pass.losAzimuth)
|
||||||
binding.passLeoAosAz.text =
|
passLeoProgress.progress = satPass.progress
|
||||||
String.format(context.getString(R.string.pass_aos_az), satPass.pass.aosAzimuth)
|
|
||||||
binding.passLeoLosAz.text =
|
|
||||||
String.format(context.getString(R.string.pass_los_az), satPass.pass.losAzimuth)
|
|
||||||
binding.passLeoProgress.progress = satPass.progress
|
|
||||||
|
|
||||||
val dateFormat =
|
if (shouldUseUTC) simpleDateFormat.timeZone = timeZoneUTC
|
||||||
SimpleDateFormat(context.getString(R.string.pass_dateTime), Locale.getDefault())
|
passLeoAosTime.text = simpleDateFormat.format(satPass.pass.startTime)
|
||||||
if (shouldUseUTC) dateFormat.timeZone = TimeZone.getTimeZone("UTC")
|
passLeoLosTime.text = simpleDateFormat.format(satPass.pass.endTime)
|
||||||
binding.passLeoAosTime.text = dateFormat.format(satPass.pass.startTime)
|
}
|
||||||
binding.passLeoLosTime.text = dateFormat.format(satPass.pass.endTime)
|
|
||||||
|
|
||||||
itemView.setOnClickListener {
|
itemView.setOnClickListener {
|
||||||
val passIndex = satPassList.indexOf(satPass)
|
val passIndex = satPassList.indexOf(satPass)
|
||||||
@@ -137,16 +136,15 @@ class PassesAdapter(private var satPassList: MutableList<SatPass> = mutableListO
|
|||||||
RecyclerView.ViewHolder(itemView) {
|
RecyclerView.ViewHolder(itemView) {
|
||||||
|
|
||||||
fun bind(satPass: SatPass) {
|
fun bind(satPass: SatPass) {
|
||||||
val context: Context = itemView.context
|
|
||||||
val satPos = satPass.predictor.getSatPos(satPass.pass.startTime)
|
val satPos = satPass.predictor.getSatPos(satPass.pass.startTime)
|
||||||
val azimuth = satPos.azimuth * 180 / Math.PI
|
val azimuth = Math.toDegrees(satPos.azimuth)
|
||||||
|
|
||||||
binding.passGeoName.text = satPass.tle.name
|
binding.apply {
|
||||||
binding.passGeoId.text =
|
passGeoName.text = satPass.tle.name
|
||||||
String.format(context.getString(R.string.pass_satId), satPass.tle.catnum)
|
passGeoId.text = String.format(satIdFormat, satPass.tle.catnum)
|
||||||
binding.passGeoAz.text = String.format(context.getString(R.string.pat_azimuth), azimuth)
|
passGeoAz.text = String.format(azFormat, azimuth)
|
||||||
binding.passGeoEl.text =
|
passGeoEl.text = String.format(elevFormat, satPass.pass.maxEl)
|
||||||
String.format(context.getString(R.string.pat_elevation), satPass.pass.maxEl)
|
}
|
||||||
|
|
||||||
itemView.setOnClickListener {
|
itemView.setOnClickListener {
|
||||||
val passIndex = satPassList.indexOf(satPass)
|
val passIndex = satPassList.indexOf(satPass)
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
|||||||
private lateinit var aosTimer: CountDownTimer
|
private lateinit var aosTimer: CountDownTimer
|
||||||
private lateinit var binding: FragmentPassesBinding
|
private lateinit var binding: FragmentPassesBinding
|
||||||
private lateinit var animator: ObjectAnimator
|
private lateinit var animator: ObjectAnimator
|
||||||
|
private lateinit var passesAdapter: PassesAdapter
|
||||||
private val viewModel: SharedViewModel by activityViewModels { factory }
|
private val viewModel: SharedViewModel by activityViewModels { factory }
|
||||||
private val passesAdapter = PassesAdapter()
|
|
||||||
private var isTimerSet: Boolean = false
|
private var isTimerSet: Boolean = false
|
||||||
private var passes = mutableListOf<SatPass>()
|
private var passes = mutableListOf<SatPass>()
|
||||||
|
|
||||||
@@ -83,6 +83,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setupComponents() {
|
private fun setupComponents() {
|
||||||
|
passesAdapter = PassesAdapter(requireContext(), prefsManager.shouldUseUTC())
|
||||||
binding.apply {
|
binding.apply {
|
||||||
passesRecycler.apply {
|
passesRecycler.apply {
|
||||||
layoutManager = LinearLayoutManager(requireContext())
|
layoutManager = LinearLayoutManager(requireContext())
|
||||||
@@ -104,7 +105,6 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
passesAdapter.setShouldUseUTC(prefsManager.shouldUseUTC())
|
|
||||||
setTimerForPasses(passes)
|
setTimerForPasses(passes)
|
||||||
viewModel.triggerCalculation()
|
viewModel.triggerCalculation()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user