From a32171c96f869eeaf67f25564849391be35d737d Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Thu, 5 Dec 2019 22:28:15 +0000 Subject: [PATCH] Now showing satellite current azimuth, elevation, altitude and range in RadarFragment --- .../rtbishop/lookingsat/ui/RadarFragment.kt | 61 ++++++++++--------- app/src/main/res/layout/app_bar_main.xml | 3 +- app/src/main/res/layout/fragment_radar.xml | 53 +++++++--------- app/src/main/res/values/strings.xml | 5 ++ app/src/main/res/values/styles.xml | 6 +- build.gradle | 2 +- 6 files changed, 67 insertions(+), 63 deletions(-) diff --git a/app/src/main/java/com/rtbishop/lookingsat/ui/RadarFragment.kt b/app/src/main/java/com/rtbishop/lookingsat/ui/RadarFragment.kt index f4b20590..8e1238c9 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/ui/RadarFragment.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/ui/RadarFragment.kt @@ -18,7 +18,6 @@ import com.rtbishop.lookingsat.MainViewModel import com.rtbishop.lookingsat.R import com.rtbishop.lookingsat.repo.SatPass import kotlinx.coroutines.launch -import java.text.SimpleDateFormat import java.util.* import java.util.concurrent.Executors import java.util.concurrent.TimeUnit @@ -27,7 +26,7 @@ import kotlin.math.sin class RadarFragment : Fragment() { - private val delay = 5000L + private val delay = 2000L private val service = Executors.newSingleThreadScheduledExecutor() private lateinit var viewModel: MainViewModel @@ -36,11 +35,12 @@ class RadarFragment : Fragment() { private lateinit var radarSkyFrame: FrameLayout private lateinit var transRecycler: RecyclerView private lateinit var transAdapter: TransAdapter - private lateinit var radarSatName: TextView - private lateinit var radarMaxEl: TextView - private lateinit var radarAos: TextView - private lateinit var radarLos: TextView + private lateinit var radarAzimuth: TextView + private lateinit var radarElevation: TextView + private lateinit var radarRange: TextView + private lateinit var radarAltitude: TextView private lateinit var transNoFound: TextView + private lateinit var mainActivity: MainActivity override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -58,22 +58,28 @@ class RadarFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) satPass = arguments?.get("satPass") as SatPass + mainActivity = activity as MainActivity + mainActivity.supportActionBar?.title = satPass.tle.name + radarSkyFrame = view.findViewById(R.id.radar_sky_frame) transRecycler = view.findViewById(R.id.radar_recycler) - radarSatName = view.findViewById(R.id.radar_sat_name) - radarMaxEl = view.findViewById(R.id.radar_maxEl) - radarAos = view.findViewById(R.id.radar_aos) - radarLos = view.findViewById(R.id.radar_los) - transNoFound = view.findViewById(R.id.radar_trans_no_found) + radarAzimuth = view.findViewById(R.id.radar_azimuth) + radarElevation = view.findViewById(R.id.radar_elevation) + radarRange = view.findViewById(R.id.radar_range) + radarAltitude = view.findViewById(R.id.radar_altitude) + transNoFound = view.findViewById(R.id.radar_no_trans) + + radarView = RadarView(mainActivity) + radarSkyFrame.addView(radarView) + service.scheduleAtFixedRate({ radarView.invalidate() }, 0, delay, TimeUnit.MILLISECONDS) - setupRadarView() setupTransRecycler() } private fun setupTransRecycler() { transAdapter = TransAdapter() transRecycler.apply { - layoutManager = LinearLayoutManager(activity as MainActivity) + layoutManager = LinearLayoutManager(mainActivity) adapter = transAdapter } lifecycleScope.launch { @@ -88,22 +94,6 @@ class RadarFragment : Fragment() { } } - private fun setupRadarView() { - radarView = RadarView(activity as MainActivity) - radarSkyFrame.addView(radarView) - - val aosTime = - SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(satPass.pass.startTime) - val losTime = - SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(satPass.pass.endTime) - radarSatName.text = satPass.tle.name - radarMaxEl.text = String.format("MaxEl: %.1f°", satPass.pass.maxEl) - radarAos.text = String.format("AOS - %s", aosTime) - radarLos.text = String.format("LOS - %s", losTime) - - service.scheduleAtFixedRate({ radarView.invalidate() }, delay, delay, TimeUnit.MILLISECONDS) - } - inner class RadarView(context: Context) : View(context) { private val radarSize = resources.displayMetrics.widthPixels @@ -153,6 +143,7 @@ class RadarFragment : Fragment() { override fun onDraw(canvas: Canvas) { bmp.eraseColor(Color.TRANSPARENT) + setPassText() drawRadarView() drawRadarText() drawPassTrajectory() @@ -160,6 +151,14 @@ class RadarFragment : Fragment() { canvas.drawBitmap(bmp, left.toFloat(), top.toFloat(), null) } + private fun setPassText() { + satPos = satPass.predictor.getSatPos(Date()) + radarAzimuth.text = String.format("Azimuth: %.1f°", rad2Deg(satPos.azimuth)) + radarElevation.text = String.format("Elevation: %.1f°", rad2Deg(satPos.elevation)) + radarRange.text = String.format("Range: %.0f km", satPos.range) + radarAltitude.text = String.format("Altitude: %.0f km", satPos.altitude) + } + private fun drawRadarView() { cvs.drawLine(center - radius, center, center + radius, center, radarPaint) cvs.drawLine(center, center - radius, center, center + radius, radarPaint) @@ -213,5 +212,9 @@ class RadarFragment : Fragment() { val radius = r * (piDiv2 - elevation) / piDiv2 return (radius * sin(piDiv2 - azimuth)).toFloat() } + + private fun rad2Deg(value: Double): Double { + return value * 180 / Math.PI + } } } \ No newline at end of file diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml index 756ae53c..c5570c46 100644 --- a/app/src/main/res/layout/app_bar_main.xml +++ b/app/src/main/res/layout/app_bar_main.xml @@ -13,7 +13,8 @@ + android:layout_height="?attr/actionBarSize" + app:titleTextColor="@color/themeAccent"> - - - - + + + + @@ -53,24 +54,16 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/radar_trans_header" /> - - + app:layout_constraintTop_toBottomOf="@+id/radar_sky_frame" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d780b73b..b69c84f1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -27,6 +27,11 @@ AOS - 13:14:15 LOS - 16:17:18 + Azimuth: 180.00° + Elevation: 75.50° + Altitude: 850 km + Range: 12000 km + OK Cancel Clear All diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 8ad72592..b9a38867 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -88,13 +88,15 @@ diff --git a/build.gradle b/build.gradle index f93663f8..e6112d43 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.2' + classpath 'com.android.tools.build:gradle:3.5.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }