mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-05 20:17:29 +00:00
Now showing the active transmitters of the selected satellite in the RadarView recycler
This commit is contained in:
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)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user