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.util.*
|
||||
|
||||
class PassesAdapter(private var satPassList: MutableList<SatPass> = mutableListOf()) :
|
||||
class PassesAdapter(context: Context, private var shouldUseUTC: Boolean = false) :
|
||||
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
|
||||
private var shouldUseUTC: Boolean = false
|
||||
|
||||
fun setShouldUseUTC(boolean: Boolean) {
|
||||
shouldUseUTC = boolean
|
||||
}
|
||||
private val satIdFormat = context.getString(R.string.pass_satId)
|
||||
private val azFormat = context.getString(R.string.pat_azimuth)
|
||||
private val elevFormat = context.getString(R.string.pat_elevation)
|
||||
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>) {
|
||||
satPassList = list
|
||||
@@ -48,18 +52,18 @@ class PassesAdapter(private var satPassList: MutableList<SatPass> = mutableListO
|
||||
}
|
||||
|
||||
fun updateRecycler() {
|
||||
val timeNow = Date()
|
||||
val timeNow = System.currentTimeMillis()
|
||||
val iterator = satPassList.listIterator()
|
||||
while (iterator.hasNext()) {
|
||||
val satPass = iterator.next()
|
||||
if (satPass.progress < 100) {
|
||||
val timeStart = satPass.pass.startTime
|
||||
val timeEnd = satPass.pass.endTime
|
||||
if (timeNow.after(timeStart)) {
|
||||
val timeStart = satPass.pass.startTime.time
|
||||
val timeEnd = satPass.pass.endTime.time
|
||||
if (timeNow.minus(timeStart) > 0) {
|
||||
satPass.active = true
|
||||
val index = satPassList.indexOf(satPass)
|
||||
val deltaTotal = timeEnd.time.minus(timeStart.time)
|
||||
val deltaNow = timeNow.time.minus(timeStart.time)
|
||||
val deltaTotal = timeEnd.minus(timeStart)
|
||||
val deltaNow = timeNow.minus(timeStart)
|
||||
satPass.progress = ((deltaNow.toFloat() / deltaTotal.toFloat()) * 100).toInt()
|
||||
notifyItemChanged(index)
|
||||
}
|
||||
@@ -104,26 +108,21 @@ class PassesAdapter(private var satPassList: MutableList<SatPass> = mutableListO
|
||||
RecyclerView.ViewHolder(itemView) {
|
||||
|
||||
fun bind(satPass: SatPass) {
|
||||
val context: Context = itemView.context
|
||||
if (satPass.active) binding.passLeoImg.setImageResource(R.drawable.ic_pass_active)
|
||||
else binding.passLeoImg.setImageResource(R.drawable.ic_pass_inactive)
|
||||
binding.apply {
|
||||
if (satPass.active) passLeoImg.setImageResource(R.drawable.ic_pass_active)
|
||||
else passLeoImg.setImageResource(R.drawable.ic_pass_inactive)
|
||||
|
||||
binding.passLeoSatName.text = satPass.tle.name
|
||||
binding.passLeoSatId.text =
|
||||
String.format(context.getString(R.string.pass_satId), satPass.tle.catnum)
|
||||
binding.passLeoMaxEl.text =
|
||||
String.format(context.getString(R.string.pat_elevation), satPass.pass.maxEl)
|
||||
binding.passLeoAosAz.text =
|
||||
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
|
||||
passLeoSatName.text = satPass.tle.name
|
||||
passLeoSatId.text = String.format(satIdFormat, satPass.tle.catnum)
|
||||
passLeoMaxEl.text = String.format(elevFormat, satPass.pass.maxEl)
|
||||
passLeoAosAz.text = String.format(aosAzFormat, satPass.pass.aosAzimuth)
|
||||
passLeoLosAz.text = String.format(losAzFormat, satPass.pass.losAzimuth)
|
||||
passLeoProgress.progress = satPass.progress
|
||||
|
||||
val dateFormat =
|
||||
SimpleDateFormat(context.getString(R.string.pass_dateTime), Locale.getDefault())
|
||||
if (shouldUseUTC) dateFormat.timeZone = TimeZone.getTimeZone("UTC")
|
||||
binding.passLeoAosTime.text = dateFormat.format(satPass.pass.startTime)
|
||||
binding.passLeoLosTime.text = dateFormat.format(satPass.pass.endTime)
|
||||
if (shouldUseUTC) simpleDateFormat.timeZone = timeZoneUTC
|
||||
passLeoAosTime.text = simpleDateFormat.format(satPass.pass.startTime)
|
||||
passLeoLosTime.text = simpleDateFormat.format(satPass.pass.endTime)
|
||||
}
|
||||
|
||||
itemView.setOnClickListener {
|
||||
val passIndex = satPassList.indexOf(satPass)
|
||||
@@ -137,16 +136,15 @@ class PassesAdapter(private var satPassList: MutableList<SatPass> = mutableListO
|
||||
RecyclerView.ViewHolder(itemView) {
|
||||
|
||||
fun bind(satPass: SatPass) {
|
||||
val context: Context = itemView.context
|
||||
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.passGeoId.text =
|
||||
String.format(context.getString(R.string.pass_satId), satPass.tle.catnum)
|
||||
binding.passGeoAz.text = String.format(context.getString(R.string.pat_azimuth), azimuth)
|
||||
binding.passGeoEl.text =
|
||||
String.format(context.getString(R.string.pat_elevation), satPass.pass.maxEl)
|
||||
binding.apply {
|
||||
passGeoName.text = satPass.tle.name
|
||||
passGeoId.text = String.format(satIdFormat, satPass.tle.catnum)
|
||||
passGeoAz.text = String.format(azFormat, azimuth)
|
||||
passGeoEl.text = String.format(elevFormat, satPass.pass.maxEl)
|
||||
}
|
||||
|
||||
itemView.setOnClickListener {
|
||||
val passIndex = satPassList.indexOf(satPass)
|
||||
|
||||
@@ -55,8 +55,8 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||
private lateinit var aosTimer: CountDownTimer
|
||||
private lateinit var binding: FragmentPassesBinding
|
||||
private lateinit var animator: ObjectAnimator
|
||||
private lateinit var passesAdapter: PassesAdapter
|
||||
private val viewModel: SharedViewModel by activityViewModels { factory }
|
||||
private val passesAdapter = PassesAdapter()
|
||||
private var isTimerSet: Boolean = false
|
||||
private var passes = mutableListOf<SatPass>()
|
||||
|
||||
@@ -83,6 +83,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||
}
|
||||
|
||||
private fun setupComponents() {
|
||||
passesAdapter = PassesAdapter(requireContext(), prefsManager.shouldUseUTC())
|
||||
binding.apply {
|
||||
passesRecycler.apply {
|
||||
layoutManager = LinearLayoutManager(requireContext())
|
||||
@@ -104,7 +105,6 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||
}
|
||||
}
|
||||
}
|
||||
passesAdapter.setShouldUseUTC(prefsManager.shouldUseUTC())
|
||||
setTimerForPasses(passes)
|
||||
viewModel.triggerCalculation()
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user