mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-03 19:27:24 +00:00
Now reusing satPassList for the recycler view rather than generating it again. Minor refactoring.
This commit is contained in:
1 parent
89299d1c3b
commit
52b23bf628
6 files changed
+42
-27
No files matched your search
@@ -45,6 +45,8 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
||||
(application as LookingSatApp).appComponent.inject(this)
|
||||
}
|
||||
|
||||
var satPassList = emptyList<SatPass>()
|
||||
|
||||
val gsp = MutableLiveData<GroundStationPosition>(
|
||||
GroundStationPosition(
|
||||
preferences.getDouble(keyLat, 0.0),
|
||||
@@ -70,15 +72,15 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getPasses(): List<SatPass> {
|
||||
val satPassList = mutableListOf<SatPass>()
|
||||
suspend fun getPasses() {
|
||||
val passList = mutableListOf<SatPass>()
|
||||
withContext(Dispatchers.Default) {
|
||||
tleSelectedMap.forEach { (tle, value) ->
|
||||
if (value) {
|
||||
try {
|
||||
val predictor = PassPredictor(tle, gsp.value)
|
||||
val passes = predictor.getPasses(Date(), passPrefs.hoursAhead, false)
|
||||
passes.forEach { satPassList.add(SatPass(tle, predictor, it)) }
|
||||
passes.forEach { passList.add(SatPass(tle, predictor, it)) }
|
||||
} catch (exception: IllegalArgumentException) {
|
||||
debugMessage.postValue("There was a problem with TLE")
|
||||
} catch (exception: SatNotFoundException) {
|
||||
@@ -86,10 +88,10 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
||||
}
|
||||
}
|
||||
}
|
||||
satPassList.retainAll { it.pass.maxEl >= passPrefs.maxEl }
|
||||
satPassList.sortBy { it.pass.startTime }
|
||||
passList.retainAll { it.pass.maxEl >= passPrefs.maxEl }
|
||||
passList.sortBy { it.pass.startTime }
|
||||
}
|
||||
return satPassList
|
||||
satPassList = passList
|
||||
}
|
||||
|
||||
fun updateSelectedSatMap(mutableMap: MutableMap<TLE, Boolean>) {
|
||||
@@ -150,8 +152,8 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
||||
}
|
||||
}
|
||||
|
||||
fun SharedPreferences.Editor.putDouble(key: String, double: Double): SharedPreferences.Editor =
|
||||
putLong(key, java.lang.Double.doubleToRawLongBits(double))
|
||||
fun SharedPreferences.Editor.putDouble(key: String, double: Double)
|
||||
: SharedPreferences.Editor = putLong(key, double.toRawBits())
|
||||
|
||||
fun SharedPreferences.getDouble(key: String, default: Double) =
|
||||
java.lang.Double.longBitsToDouble(getLong(key, java.lang.Double.doubleToRawLongBits(default)))
|
||||
Double.fromBits(getLong(key, default.toRawBits()))
|
||||
@@ -7,29 +7,33 @@ import android.widget.TextView
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.navigation.findNavController
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.card.MaterialCardView
|
||||
import com.rtbishop.lookingsat.R
|
||||
import com.rtbishop.lookingsat.repo.SatPass
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
class SatPassAdapter(private val satPassList: List<SatPass>) :
|
||||
RecyclerView.Adapter<SatPassAdapter.ViewHolder>() {
|
||||
class SatPassAdapter : RecyclerView.Adapter<SatPassAdapter.ViewHolder>() {
|
||||
|
||||
private var satPassList = emptyList<SatPass>()
|
||||
|
||||
fun setList(list: List<SatPass>) {
|
||||
satPassList = list
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return satPassList.size
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||
val itemView =
|
||||
LayoutInflater.from(parent.context).inflate(R.layout.sat_pass_card, parent, false)
|
||||
val itemView = LayoutInflater
|
||||
.from(parent.context)
|
||||
.inflate(R.layout.sat_pass_card, parent, false)
|
||||
return ViewHolder(itemView)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
val satPass = satPassList[position]
|
||||
|
||||
val layout = holder.itemView.findViewById<MaterialCardView>(R.id.card_view)
|
||||
val satName = holder.itemView.findViewById<TextView>(R.id.card_sat_name)
|
||||
val maxEl = holder.itemView.findViewById<TextView>(R.id.card_max_el)
|
||||
val passVector = holder.itemView.findViewById<TextView>(R.id.card_pass_vector)
|
||||
@@ -47,7 +51,7 @@ class SatPassAdapter(private val satPassList: List<SatPass>) :
|
||||
passStart.text = String.format("AOS - %s", aosTime)
|
||||
passEnd.text = String.format("LOS - %s", losTime)
|
||||
|
||||
layout.setOnClickListener {
|
||||
holder.itemView.setOnClickListener {
|
||||
val bundle = bundleOf("satPass" to satPass)
|
||||
holder.itemView.findNavController().navigate(R.id.action_nav_sky_to_nav_radar, bundle)
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import android.view.ViewGroup
|
||||
import android.widget.*
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
@@ -17,6 +16,7 @@ import com.github.amsacode.predict4java.TLE
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
import com.rtbishop.lookingsat.MainViewModel
|
||||
import com.rtbishop.lookingsat.R
|
||||
import com.rtbishop.lookingsat.repo.SatPass
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.concurrent.TimeUnit
|
||||
@@ -27,17 +27,19 @@ class SkyFragment : Fragment() {
|
||||
private lateinit var recViewCurrent: RecyclerView
|
||||
private lateinit var recViewFuture: RecyclerView
|
||||
private lateinit var recAdapterCurrent: RecyclerView.Adapter<*>
|
||||
private lateinit var recAdapterFuture: RecyclerView.Adapter<*>
|
||||
private lateinit var recAdapterFuture: SatPassAdapter
|
||||
private lateinit var timeToAos: TextView
|
||||
private lateinit var btnPassPrefs: ImageButton
|
||||
private lateinit var progressBar: ProgressBar
|
||||
private lateinit var fab: FloatingActionButton
|
||||
private lateinit var aosTimer: CountDownTimer
|
||||
private lateinit var satPassList: List<SatPass>
|
||||
private var isTimerSet: Boolean = false
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
viewModel = ViewModelProvider(activity as MainActivity).get(MainViewModel::class.java)
|
||||
recAdapterFuture = SatPassAdapter()
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
@@ -58,12 +60,19 @@ class SkyFragment : Fragment() {
|
||||
recViewFuture = view.findViewById(R.id.sky_recycler_future)
|
||||
fab = view.findViewById(R.id.sky_fab)
|
||||
|
||||
recViewFuture.layoutManager = LinearLayoutManager(activity)
|
||||
satPassList = viewModel.satPassList
|
||||
recViewFuture.apply {
|
||||
layoutManager = LinearLayoutManager(activity as MainActivity)
|
||||
adapter = recAdapterFuture
|
||||
}
|
||||
recAdapterFuture.setList(satPassList)
|
||||
recAdapterFuture.notifyDataSetChanged()
|
||||
if (satPassList.isEmpty()) {
|
||||
resetTimer()
|
||||
}
|
||||
|
||||
btnPassPrefs.setOnClickListener { showSatPassPrefsDialog() }
|
||||
fab.setOnClickListener { showSelectSatDialog() }
|
||||
|
||||
viewModel.gsp.observe(this, Observer { calculatePasses() })
|
||||
}
|
||||
|
||||
private fun showSatPassPrefsDialog() {
|
||||
@@ -138,9 +147,10 @@ class SkyFragment : Fragment() {
|
||||
recViewFuture.visibility = View.INVISIBLE
|
||||
progressBar.visibility = View.VISIBLE
|
||||
progressBar.isIndeterminate = true
|
||||
val satPassList = viewModel.getPasses()
|
||||
recAdapterFuture = SatPassAdapter(satPassList)
|
||||
recViewFuture.adapter = recAdapterFuture
|
||||
viewModel.getPasses()
|
||||
satPassList = viewModel.satPassList
|
||||
recAdapterFuture.setList(satPassList)
|
||||
recAdapterFuture.notifyDataSetChanged()
|
||||
progressBar.isIndeterminate = false
|
||||
progressBar.visibility = View.INVISIBLE
|
||||
recViewFuture.visibility = View.VISIBLE
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
android:id="@+id/sky_recycler_future"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:visibility="invisible"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/pass_pref_hint_maxEl"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:inputType="numberDecimal"
|
||||
app:layout_constraintEnd_toEndOf="@+id/pass_pref_tv_maxEl"
|
||||
app:layout_constraintStart_toStartOf="@+id/pass_pref_tv_maxEl"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pass_pref_tv_maxEl" />
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
<style name="CardSatPass.SideText">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:textSize">20sp</item>
|
||||
<item name="android:textSize">18sp</item>
|
||||
</style>
|
||||
|
||||
<style name="CardSatPass.MaxEl">
|
||||
|
||||
Reference in new issue
Block a user