kopia lustrzana https://github.com/rt-bishop/Look4Sat
Added SingleSat selection dialog. Setting up the WorldMapFragment for future track drawing feature.
rodzic
b44ff7272f
commit
396a216320
|
|
@ -58,6 +58,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||
|
||||
var tleMainList = loadTwoLineElementFile()
|
||||
var tleSelectedMap = mutableMapOf<TLE, Boolean>()
|
||||
var selectedSingleSat = tleMainList[0]
|
||||
var passPrefs = SatPassPrefs(
|
||||
preferences.getInt(keyHours, 8),
|
||||
preferences.getDouble(keyMaxEl, 16.0)
|
||||
|
|
@ -73,6 +74,10 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||
}
|
||||
}
|
||||
|
||||
fun updateSelectedSingleSat(sat: TLE) {
|
||||
selectedSingleSat = sat
|
||||
}
|
||||
|
||||
suspend fun getPasses() {
|
||||
val passList = mutableListOf<SatPass>()
|
||||
withContext(Dispatchers.Default) {
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ class SkyFragment : Fragment() {
|
|||
}
|
||||
|
||||
private fun showSelectSatDialog() {
|
||||
val tleMainList: List<TLE> = viewModel.tleMainList
|
||||
val tleMainList = viewModel.tleMainList
|
||||
val tleNameArray = arrayOfNulls<String>(tleMainList.size)
|
||||
val tleCheckedArray = BooleanArray(tleMainList.size)
|
||||
val selectedSatMap = viewModel.tleSelectedMap
|
||||
|
|
|
|||
|
|
@ -1,14 +1,41 @@
|
|||
package com.rtbishop.lookingsat.ui
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.github.amsacode.predict4java.PassPredictor
|
||||
import com.github.amsacode.predict4java.TLE
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
import com.rtbishop.lookingsat.MainViewModel
|
||||
import com.rtbishop.lookingsat.R
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.concurrent.Executors
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class WorldMapFragment : Fragment() {
|
||||
|
||||
private val delay = 3000L
|
||||
private val service = Executors.newSingleThreadScheduledExecutor()
|
||||
|
||||
private lateinit var viewModel: MainViewModel
|
||||
private lateinit var trackView: TrackView
|
||||
private lateinit var mapFrame: FrameLayout
|
||||
private lateinit var fab: FloatingActionButton
|
||||
private lateinit var selectedSat: TLE
|
||||
private lateinit var predictor: PassPredictor
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
viewModel = ViewModelProvider(activity as MainActivity).get(MainViewModel::class.java)
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
|
@ -16,4 +43,47 @@ class WorldMapFragment : Fragment() {
|
|||
): View? {
|
||||
return inflater.inflate(R.layout.fragment_worldmap, container, false)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
mapFrame = view.findViewById(R.id.worldmap_frame)
|
||||
fab = view.findViewById(R.id.worldmap_fab)
|
||||
fab.setOnClickListener { showSelectSatDialog() }
|
||||
|
||||
selectedSat = viewModel.selectedSingleSat
|
||||
lifecycleScope.launch {
|
||||
predictor = PassPredictor(selectedSat, viewModel.gsp.value)
|
||||
}
|
||||
|
||||
trackView = TrackView(activity as MainActivity)
|
||||
mapFrame.addView(trackView)
|
||||
|
||||
service.scheduleAtFixedRate({ trackView.invalidate() }, delay, delay, TimeUnit.MILLISECONDS)
|
||||
}
|
||||
|
||||
private fun showSelectSatDialog() {
|
||||
val tleMainList = viewModel.tleMainList
|
||||
val tleNameArray = arrayOfNulls<String>(tleMainList.size)
|
||||
var selection = viewModel.selectedSingleSat
|
||||
|
||||
tleMainList.withIndex().forEach { (position, tle) ->
|
||||
tleNameArray[position] = tle.name
|
||||
}
|
||||
|
||||
val builder = AlertDialog.Builder(activity as MainActivity)
|
||||
builder.setTitle("Select Sat to track")
|
||||
.setSingleChoiceItems(tleNameArray, -1) { _, which ->
|
||||
selection = tleMainList[which]
|
||||
}
|
||||
.setPositiveButton("Ok") { _, _ ->
|
||||
viewModel.updateSelectedSingleSat(selection)
|
||||
}
|
||||
.setNegativeButton("Cancel") { dialog, _ ->
|
||||
dialog.cancel()
|
||||
}
|
||||
.create()
|
||||
.show()
|
||||
}
|
||||
|
||||
inner class TrackView(context: Context) : View(context)
|
||||
}
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".ui.WorldMapFragment">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/worldmap_img"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:contentDescription="@string/map_content"
|
||||
android:scaleType="fitXY"
|
||||
android:src="@drawable/map_nasa"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/worldmap_fab"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|start"
|
||||
android:layout_marginStart="@dimen/fab_margin"
|
||||
android:layout_marginBottom="@dimen/fab_margin"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:srcCompat="@drawable/ic_sat_asc_right" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
@ -13,9 +13,7 @@
|
|||
app:layout_constraintDimensionRatio="1:1"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
</FrameLayout>
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_sat_name"
|
||||
|
|
|
|||
|
|
@ -6,13 +6,11 @@
|
|||
android:layout_height="match_parent"
|
||||
tools:context=".ui.WorldMapFragment">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/worldmap_img"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:contentDescription="@string/map_content"
|
||||
android:scaleType="fitXY"
|
||||
android:src="@drawable/map_nasa"
|
||||
<FrameLayout
|
||||
android:id="@+id/worldmap_frame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/map_nasa"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue