Now showing the active transmitters of the selected satellite in the RadarView recycler

This commit is contained in:
Arty Bishop committed 2019-12-01 14:57:52 +00:00
1 parent 52b23bf628
commit b44ff7272f
9 files changed
+283 -43

No files matched your search

@@ -17,6 +17,7 @@ import com.google.android.gms.location.LocationServices
import com.rtbishop.lookingsat.repo.Repository
import com.rtbishop.lookingsat.repo.SatPass
import com.rtbishop.lookingsat.repo.SatPassPrefs
import com.rtbishop.lookingsat.repo.Transmitter
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -150,6 +151,10 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
}
}
}
suspend fun getTransmittersForSat(id: Int): List<Transmitter> {
return repository.getTransmittersForSat(id)
}
}
fun SharedPreferences.Editor.putDouble(key: String, double: Double)
@@ -9,10 +9,15 @@ import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.github.amsacode.predict4java.SatPos
import com.rtbishop.lookingsat.MainViewModel
import com.rtbishop.lookingsat.R
import com.rtbishop.lookingsat.repo.SatPass
import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.*
import java.util.concurrent.Executors
@@ -25,14 +30,22 @@ class RadarFragment : Fragment() {
private val delay = 5000L
private val service = Executors.newSingleThreadScheduledExecutor()
private lateinit var viewModel: MainViewModel
private lateinit var satPass: SatPass
private lateinit var radarView: RadarView
private lateinit var radarSkyFrame: FrameLayout
private lateinit var radarRecycler: RecyclerView
private lateinit var transRecycler: RecyclerView
private lateinit var transAdapter: TransAdapter
private lateinit var radarSatName: TextView
private lateinit var radarMaxEl: TextView
private lateinit var radarAos: TextView
private lateinit var radarLos: TextView
private lateinit var transNoFound: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(activity as MainActivity).get(MainViewModel::class.java)
}
override fun onCreateView(
inflater: LayoutInflater,
@@ -46,13 +59,36 @@ class RadarFragment : Fragment() {
super.onViewCreated(view, savedInstanceState)
satPass = arguments?.get("satPass") as SatPass
radarSkyFrame = view.findViewById(R.id.radar_sky_frame)
radarRecycler = view.findViewById(R.id.radar_recycler)
transRecycler = view.findViewById(R.id.radar_recycler)
radarSatName = view.findViewById(R.id.radar_sat_name)
radarMaxEl = view.findViewById(R.id.radar_maxEl)
radarAos = view.findViewById(R.id.radar_aos)
radarLos = view.findViewById(R.id.radar_los)
transNoFound = view.findViewById(R.id.radar_trans_no_found)
setupRadarView()
setupTransRecycler()
}
private fun setupTransRecycler() {
transAdapter = TransAdapter()
transRecycler.apply {
layoutManager = LinearLayoutManager(activity as MainActivity)
adapter = transAdapter
}
lifecycleScope.launch {
val transList = viewModel.getTransmittersForSat(satPass.tle.catnum)
if (transList.isNotEmpty()) {
transAdapter.setList(transList)
transAdapter.notifyDataSetChanged()
} else {
transRecycler.visibility = View.INVISIBLE
transNoFound.visibility = View.VISIBLE
}
}
}
private fun setupRadarView() {
radarView = RadarView(activity as MainActivity)
radarSkyFrame.addView(radarView)
@@ -12,7 +12,9 @@ import com.rtbishop.lookingsat.repo.SatPass
import java.text.SimpleDateFormat
import java.util.*
class SatPassAdapter : RecyclerView.Adapter<SatPassAdapter.ViewHolder>() {
class SatPassAdapter : RecyclerView.Adapter<SatPassAdapter.PassHolder>() {
inner class PassHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
private var satPassList = emptyList<SatPass>()
@@ -24,14 +26,14 @@ class SatPassAdapter : RecyclerView.Adapter<SatPassAdapter.ViewHolder>() {
return satPassList.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PassHolder {
val itemView = LayoutInflater
.from(parent.context)
.inflate(R.layout.sat_pass_card, parent, false)
return ViewHolder(itemView)
return PassHolder(itemView)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
override fun onBindViewHolder(holder: PassHolder, position: Int) {
val satPass = satPassList[position]
val satName = holder.itemView.findViewById<TextView>(R.id.card_sat_name)
@@ -56,6 +58,4 @@ class SatPassAdapter : RecyclerView.Adapter<SatPassAdapter.ViewHolder>() {
holder.itemView.findNavController().navigate(R.id.action_nav_sky_to_nav_radar, bundle)
}
}
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
}
@@ -0,0 +1,95 @@
package com.rtbishop.lookingsat.ui
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.rtbishop.lookingsat.R
import com.rtbishop.lookingsat.repo.Transmitter
class TransAdapter : RecyclerView.Adapter<TransAdapter.TransHolder>() {
inner class TransHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
private var transList = emptyList<Transmitter>()
fun setList(list: List<Transmitter>) {
transList = list
}
override fun getItemCount(): Int {
return transList.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TransHolder {
val itemView = LayoutInflater
.from(parent.context)
.inflate(R.layout.card_transmitter, parent, false)
return TransHolder(itemView)
}
override fun onBindViewHolder(holder: TransHolder, position: Int) {
val context = holder.itemView.context
val freqDivider = 1000000f
val transmitter = transList[position]
val description = holder.itemView.findViewById<TextView>(R.id.trans_description)
val downlink = holder.itemView.findViewById<TextView>(R.id.trans_downlink)
val uplink = holder.itemView.findViewById<TextView>(R.id.trans_uplink)
val mode = holder.itemView.findViewById<TextView>(R.id.trans_mode)
val inverted = holder.itemView.findViewById<TextView>(R.id.trans_inverted)
description.text = transmitter.description
if (transmitter.downlinkLow != null && transmitter.downlinkHigh == null) {
downlink.text = String.format(
context.getString(R.string.pattern_trans_downlink_low),
transmitter.downlinkLow / freqDivider
)
} else if (transmitter.downlinkLow != null && transmitter.downlinkHigh != null) {
downlink.text = String.format(
context.getString(R.string.pattern_trans_downlink_lowHigh),
transmitter.downlinkLow / freqDivider,
transmitter.downlinkHigh / freqDivider
)
} else {
downlink.text = context.getString(R.string.no_downlink)
}
if (transmitter.uplinkLow != null && transmitter.uplinkHigh == null) {
uplink.text = String.format(
context.getString(R.string.pattern_trans_uplink_low),
transmitter.uplinkLow / freqDivider
)
} else if (transmitter.uplinkLow != null && transmitter.uplinkHigh != null) {
uplink.text = String.format(
context.getString(R.string.pattern_trans_uplink_lowHigh),
transmitter.uplinkLow / freqDivider,
transmitter.uplinkHigh / freqDivider
)
} else {
uplink.text = context.getString(R.string.no_uplink)
}
if (transmitter.mode != null) {
mode.text =
String.format(
context.getString(R.string.pattern_trans_mode),
transmitter.mode
)
} else {
mode.text = context.getString(R.string.no_mode)
}
if (transmitter.isInverted) {
inverted.text = String.format(
context.getString(R.string.pattern_trans_inverted),
context.getString(R.string.yes)
)
} else {
inverted.text = String.format(
context.getString(R.string.pattern_trans_inverted),
context.getString(R.string.no)
)
}
}
}