mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Sorted out the memory leak in radar fragment
This commit is contained in:
1 parent
c58cf94181
commit
65941a8304
2 files changed
+93
-93
No files matched your search
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radio_downlink"
|
||||
style="@style/RadioFreq"
|
||||
android:layout_marginStart="4dp"
|
||||
android:layout_marginTop="3dp"
|
||||
app:layout_constraintEnd_toStartOf="@+id/radio_guide"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/radio_info" />
|
||||
@@ -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" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radio_uplink"
|
||||
style="@style/RadioFreq"
|
||||
android:layout_marginEnd="4dp"
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/radio_downlink"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="@+id/radio_guide" />
|
||||
@@ -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"
|
||||
|
||||
Reference in new issue
Block a user