Added SingleSat selection dialog. Setting up the WorldMapFragment for future track drawing feature.

pull/30/head
Arty Bishop 2019-12-01 21:09:20 +00:00
rodzic b44ff7272f
commit 396a216320
6 zmienionych plików z 82 dodań i 42 usunięć

Wyświetl plik

@ -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) {

Wyświetl plik

@ -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

Wyświetl plik

@ -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)
}

Wyświetl plik

@ -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>

Wyświetl plik

@ -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"

Wyświetl plik

@ -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"