diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarFragment.kt
index 69f488a7..db2151d9 100644
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarFragment.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarFragment.kt
@@ -38,103 +38,24 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
private val viewModel: RadarViewModel by viewModels()
private val navArgs: RadarFragmentArgs by navArgs()
- private lateinit var binding: FragmentRadarBinding
- private lateinit var radarView: RadarView
+ private val radioAdapter = RadioAdapter()
+ private var binding: FragmentRadarBinding? = null
+ private var radarView: RadarView? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- binding = FragmentRadarBinding.bind(view)
- setupComponents()
- }
-
- private fun setupComponents() {
- val context = requireContext()
- val adapter = RadioAdapter()
- val layoutManager = LinearLayoutManager(context)
- val itemDecoration = DividerItemDecoration(context, layoutManager.orientation)
- binding.run {
+ binding = FragmentRadarBinding.bind(view).apply {
radarRecycler.apply {
setHasFixedSize(true)
- this.adapter = adapter
- this.layoutManager = LinearLayoutManager(context)
- addItemDecoration(itemDecoration)
+ this.adapter = radioAdapter
+ this.layoutManager = LinearLayoutManager(requireContext())
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
+ addItemDecoration(DividerItemDecoration(requireContext(), 1))
}
- setupObservers(adapter)
+ setupObservers()
}
}
- private fun setupObservers(radioAdapter: RadioAdapter) {
- viewModel.getPass(navArgs.catNum, navArgs.aosTime).observe(viewLifecycleOwner) { pass ->
- radarView = RadarView(requireContext()).apply {
- setShowAim(viewModel.getUseCompass())
- setScanning(viewModel.getShowSweep())
- }
- binding.radarCard.addView(radarView)
- viewModel.radarData.observe(viewLifecycleOwner) { passData ->
- radarView.setPosition(passData.satPos)
- radarView.setPositions(passData.satTrack)
- setPassText(pass, passData.satPos)
- }
- viewModel.transmitters.observe(viewLifecycleOwner) { list ->
- if (list.isNotEmpty()) {
- radioAdapter.submitList(list)
- binding.radarRecyclerMsg.text = getString(R.string.trans_data)
- } else {
- binding.radarRecyclerMsg.text = getString(R.string.trans_no_data)
- }
- radarView.invalidate()
- }
- viewModel.orientation.observe(viewLifecycleOwner) { value ->
- radarView.setOrientation(value.first, value.second, value.third)
- }
- binding.radarBack.setOnClickListener { findNavController().navigateUp() }
- binding.radarMap.setOnClickListener { navigateToMap(pass.catNum) }
- binding.radarBtnNotify.isEnabled = false
- binding.radarBtnSettings.setOnClickListener { navigateToSettings() }
- }
- }
-
- private fun setPassText(satPass: SatPass, satPos: SatPos) {
- val timeNow = System.currentTimeMillis()
- val radarAzim = getString(R.string.radar_az_value)
- val radarElev = getString(R.string.radar_el_value)
- val radarAlt = getString(R.string.radar_alt_value)
- val radarDist = getString(R.string.radar_dist_value)
- val radarId = getString(R.string.radar_sat_id)
- binding.radarAzValue.text = String.format(radarAzim, Math.toDegrees(satPos.azimuth))
- binding.radarElValue.text = String.format(radarElev, Math.toDegrees(satPos.elevation))
- binding.radarAltValue.text = String.format(radarAlt, satPos.altitude)
- binding.radarDstValue.text = String.format(radarDist, satPos.distance)
- binding.radarSatId.text = String.format(radarId, satPass.catNum)
-
- if (!satPass.isDeepSpace) {
- if (timeNow < satPass.aosTime) {
- val millisBeforeStart = satPass.aosTime.minus(timeNow)
- binding.radarTimer.text = millisBeforeStart.toTimerString()
- } else {
- val millisBeforeEnd = satPass.losTime.minus(timeNow)
- binding.radarTimer.text = millisBeforeEnd.toTimerString()
- if (timeNow > satPass.losTime) {
- binding.radarTimer.text = 0L.toTimerString()
- findNavController().navigateUp()
- }
- }
- } else {
- binding.radarTimer.text = 0L.toTimerString()
- }
- }
-
- private fun navigateToMap(catnum: Int) {
- val direction = RadarFragmentDirections.actionGlobalMapFragment(catnum)
- findNavController().navigate(direction)
- }
-
- private fun navigateToSettings() {
- val direction = RadarFragmentDirections.actionGlobalSettingsFragment()
- findNavController().navigate(direction)
- }
-
override fun onResume() {
super.onResume()
viewModel.enableSensor()
@@ -144,4 +65,79 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
super.onPause()
viewModel.disableSensor()
}
+
+ override fun onDestroyView() {
+ binding?.radarRecycler?.adapter = null
+ radarView = null
+ binding = null
+ super.onDestroyView()
+ }
+
+ private fun setupObservers() {
+ viewModel.getPass(navArgs.catNum, navArgs.aosTime).observe(viewLifecycleOwner) { pass ->
+ binding?.run {
+ radarView = RadarView(requireContext()).apply {
+ setShowAim(viewModel.getUseCompass())
+ setScanning(viewModel.getShowSweep())
+ }
+ radarCard.addView(radarView)
+ viewModel.radarData.observe(viewLifecycleOwner) { passData ->
+ radarView?.setPosition(passData.satPos)
+ radarView?.setPositions(passData.satTrack)
+ setPassText(pass, passData.satPos)
+ }
+ viewModel.transmitters.observe(viewLifecycleOwner) { list ->
+ if (list.isNotEmpty()) {
+ radioAdapter.submitList(list)
+ radarRecyclerMsg.text = getString(R.string.trans_data)
+ } else {
+ radarRecyclerMsg.text = getString(R.string.trans_no_data)
+ }
+ radarView?.invalidate()
+ }
+ viewModel.orientation.observe(viewLifecycleOwner) { value ->
+ radarView?.setOrientation(value.first, value.second, value.third)
+ }
+ radarBack.setOnClickListener { findNavController().navigateUp() }
+ radarMap.setOnClickListener {
+ val direction = RadarFragmentDirections.actionGlobalMapFragment(pass.catNum)
+ findNavController().navigate(direction)
+ }
+ radarBtnNotify.isEnabled = false
+ radarBtnSettings.setOnClickListener {
+ val direction = RadarFragmentDirections.actionGlobalSettingsFragment()
+ findNavController().navigate(direction)
+ }
+ }
+ }
+ }
+
+ private fun setPassText(satPass: SatPass, satPos: SatPos) {
+ binding?.run {
+ val timeNow = System.currentTimeMillis()
+ val radarAzim = getString(R.string.radar_az_value)
+ val radarElev = getString(R.string.radar_el_value)
+ val radarAlt = getString(R.string.radar_alt_value)
+ val radarDist = getString(R.string.radar_dist_value)
+ val radarId = getString(R.string.radar_sat_id)
+ radarAzValue.text = String.format(radarAzim, Math.toDegrees(satPos.azimuth))
+ radarElValue.text = String.format(radarElev, Math.toDegrees(satPos.elevation))
+ radarAltValue.text = String.format(radarAlt, satPos.altitude)
+ radarDstValue.text = String.format(radarDist, satPos.distance)
+ radarSatId.text = String.format(radarId, satPass.catNum)
+ if (!satPass.isDeepSpace) {
+ if (timeNow < satPass.aosTime) {
+ val millisBeforeStart = satPass.aosTime.minus(timeNow)
+ radarTimer.text = millisBeforeStart.toTimerString()
+ } else {
+ val millisBeforeEnd = satPass.losTime.minus(timeNow)
+ radarTimer.text = millisBeforeEnd.toTimerString()
+ if (timeNow > satPass.losTime) {
+ radarTimer.text = 0L.toTimerString()
+ findNavController().navigateUp()
+ }
+ }
+ } else radarTimer.text = 0L.toTimerString()
+ }
+ }
}
diff --git a/app/src/main/res/layout/item_radio.xml b/app/src/main/res/layout/item_radio.xml
index 0875afcf..355c9baf 100644
--- a/app/src/main/res/layout/item_radio.xml
+++ b/app/src/main/res/layout/item_radio.xml
@@ -35,17 +35,19 @@
android:id="@+id/radio_down_img"
android:layout_width="18dp"
android:layout_height="18dp"
- android:layout_marginStart="4dp"
+ android:layout_marginStart="6dp"
+ android:contentDescription="@string/downlink"
android:rotation="90"
app:layout_constraintBottom_toBottomOf="@+id/radio_info"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/radio_info"
- android:contentDescription="@string/downlink"
app:srcCompat="@drawable/ic_next" />
@@ -54,17 +56,18 @@
android:id="@+id/radio_up_img"
android:layout_width="18dp"
android:layout_height="18dp"
- android:layout_marginEnd="4dp"
+ android:layout_marginEnd="6dp"
+ android:contentDescription="@string/uplink"
android:rotation="270"
app:layout_constraintBottom_toBottomOf="@+id/radio_info"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/radio_info"
- android:contentDescription="@string/uplink"
app:srcCompat="@drawable/ic_next" />
@@ -73,7 +76,8 @@
android:id="@+id/radio_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginStart="6dp"
+ android:layout_marginStart="8dp"
+ android:layout_marginTop="2dp"
android:layout_marginBottom="4dp"
android:text="@string/trans_mode"
android:textSize="@dimen/text_size_small"
@@ -87,7 +91,7 @@
android:id="@+id/radio_inverted"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginEnd="6dp"
+ android:layout_marginEnd="8dp"
android:text="@string/trans_inverted"
android:textSize="@dimen/text_size_small"
app:layout_constraintBaseline_toBaselineOf="@+id/radio_mode"