Now reusing satPassList for the recycler view rather than generating it again. Minor refactoring.

This commit is contained in:
Arty Bishop committed 2019-11-30 23:52:06 +00:00
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
-1
View File
@@ -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"
+1 -1
View File
@@ -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" />
+1 -1
View File
@@ -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">