diff --git a/app/src/main/java/com/rtbishop/lookingsat/MainViewModel.kt b/app/src/main/java/com/rtbishop/lookingsat/MainViewModel.kt index c305c13d..b368feef 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/MainViewModel.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/MainViewModel.kt @@ -58,6 +58,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { var tleMainList = loadTwoLineElementFile() var tleSelectedMap = mutableMapOf() + 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() withContext(Dispatchers.Default) { diff --git a/app/src/main/java/com/rtbishop/lookingsat/ui/SkyFragment.kt b/app/src/main/java/com/rtbishop/lookingsat/ui/SkyFragment.kt index 607b80b7..a13b3530 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/ui/SkyFragment.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/ui/SkyFragment.kt @@ -100,7 +100,7 @@ class SkyFragment : Fragment() { } private fun showSelectSatDialog() { - val tleMainList: List = viewModel.tleMainList + val tleMainList = viewModel.tleMainList val tleNameArray = arrayOfNulls(tleMainList.size) val tleCheckedArray = BooleanArray(tleMainList.size) val selectedSatMap = viewModel.tleSelectedMap diff --git a/app/src/main/java/com/rtbishop/lookingsat/ui/WorldMapFragment.kt b/app/src/main/java/com/rtbishop/lookingsat/ui/WorldMapFragment.kt index 65be6786..36609779 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/ui/WorldMapFragment.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/ui/WorldMapFragment.kt @@ -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(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) } \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_worldmap.xml b/app/src/main/res/layout-land/fragment_worldmap.xml deleted file mode 100644 index bc30a868..00000000 --- a/app/src/main/res/layout-land/fragment_worldmap.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_radar.xml b/app/src/main/res/layout/fragment_radar.xml index f0444823..cd820ead 100644 --- a/app/src/main/res/layout/fragment_radar.xml +++ b/app/src/main/res/layout/fragment_radar.xml @@ -13,9 +13,7 @@ app:layout_constraintDimensionRatio="1:1" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent"> - - + app:layout_constraintTop_toTopOf="parent" /> -