mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 19:17:22 +00:00
Using alternative constructors for fragments to avoid NPE
This commit is contained in:
1 parent
bd2891e9a2
commit
c221908854
5 files changed
+30
-107
No files matched your search
@@ -21,37 +21,19 @@ package com.rtbishop.look4sat.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import android.text.method.LinkMovementMethod
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.rtbishop.look4sat.BuildConfig
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.FragmentAboutBinding
|
||||
|
||||
class AboutFragment : Fragment() {
|
||||
|
||||
private var _binding: FragmentAboutBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
_binding = FragmentAboutBinding.inflate(inflater, container, false)
|
||||
return binding.root
|
||||
}
|
||||
class AboutFragment : Fragment(R.layout.fragment_about) {
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
val binding = FragmentAboutBinding.bind(view)
|
||||
binding.tvAboutVersion.text =
|
||||
String.format(getString(R.string.app_version), BuildConfig.VERSION_NAME)
|
||||
binding.tvAboutMessage.movementMethod = LinkMovementMethod.getInstance()
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
_binding = null
|
||||
super.onDestroyView()
|
||||
}
|
||||
}
|
||||
@@ -22,9 +22,7 @@ package com.rtbishop.look4sat.ui
|
||||
import android.content.Context
|
||||
import android.graphics.*
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.content.ContextCompat
|
||||
@@ -41,16 +39,11 @@ import com.rtbishop.look4sat.predict4kotlin.PassPredictor
|
||||
import com.rtbishop.look4sat.repo.SatPass
|
||||
import java.util.*
|
||||
import java.util.concurrent.Executors
|
||||
import java.util.concurrent.ScheduledExecutorService
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlin.math.abs
|
||||
|
||||
class MapViewFragment : Fragment() {
|
||||
class MapViewFragment : Fragment(R.layout.fragment_map_view) {
|
||||
|
||||
private var _binding: FragmentMapViewBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
|
||||
private lateinit var service: ScheduledExecutorService
|
||||
private lateinit var mainActivity: MainActivity
|
||||
private lateinit var viewModel: MainViewModel
|
||||
private lateinit var mapView: MapView
|
||||
@@ -60,29 +53,12 @@ class MapViewFragment : Fragment() {
|
||||
private lateinit var satPassList: List<SatPass>
|
||||
private var checkedItem = 0
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
service = Executors.newSingleThreadScheduledExecutor()
|
||||
mainActivity = activity as MainActivity
|
||||
viewModel = ViewModelProvider(mainActivity).get(MainViewModel::class.java)
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
_binding = FragmentMapViewBinding.inflate(layoutInflater, container, false)
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
setupComponents()
|
||||
}
|
||||
|
||||
private fun setupComponents() {
|
||||
val refreshRate = viewModel.getRefreshRate()
|
||||
val binding = FragmentMapViewBinding.bind(view)
|
||||
val service = Executors.newSingleThreadScheduledExecutor()
|
||||
mainActivity = activity as MainActivity
|
||||
viewModel = ViewModelProvider(mainActivity).get(MainViewModel::class.java)
|
||||
gsp = viewModel.getGSP().value ?: GroundStationPosition(0.0, 0.0, 0.0)
|
||||
satPassList = viewModel.getSatPassList().value ?: emptyList()
|
||||
|
||||
@@ -92,12 +68,12 @@ class MapViewFragment : Fragment() {
|
||||
binding.fabMap.setOnClickListener { showSelectSatDialog(satPassList) }
|
||||
selectedSat = satPassList.first().tle
|
||||
predictor = satPassList.first().predictor
|
||||
mapView = MapView(mainActivity)
|
||||
mapView = MapView(mainActivity, binding)
|
||||
binding.frameMap.addView(mapView)
|
||||
service.scheduleAtFixedRate(
|
||||
{ mapView.invalidate() },
|
||||
refreshRate,
|
||||
refreshRate,
|
||||
viewModel.getRefreshRate(),
|
||||
viewModel.getRefreshRate(),
|
||||
TimeUnit.MILLISECONDS
|
||||
)
|
||||
} else {
|
||||
@@ -131,7 +107,8 @@ class MapViewFragment : Fragment() {
|
||||
.show()
|
||||
}
|
||||
|
||||
inner class MapView(context: Context) : View(context) {
|
||||
inner class MapView(context: Context, private val binding: FragmentMapViewBinding) :
|
||||
View(context) {
|
||||
private val scale = resources.displayMetrics.density
|
||||
private val groundTrackPaint = Paint().apply {
|
||||
isAntiAlias = true
|
||||
@@ -318,9 +295,4 @@ class MapViewFragment : Fragment() {
|
||||
return value * 180 / Math.PI
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
_binding = null
|
||||
super.onDestroyView()
|
||||
}
|
||||
}
|
||||
@@ -53,17 +53,13 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) {
|
||||
private lateinit var satPassList: MutableList<SatPass>
|
||||
private var isTimerSet: Boolean = false
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
val fragmentBinding = FragmentPassListBinding.bind(view)
|
||||
mainActivity = activity as MainActivity
|
||||
viewModel = ViewModelProvider(mainActivity).get(MainViewModel::class.java)
|
||||
satPassAdapter = SatPassAdapter(viewModel)
|
||||
satPassList = mutableListOf()
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
val fragmentBinding = FragmentPassListBinding.bind(view)
|
||||
aosTimerText = mainActivity.findViewById(R.id.toolbar_timer)
|
||||
btnPassPrefs = mainActivity.findViewById(R.id.toolbar_filter)
|
||||
setupComponents(fragmentBinding)
|
||||
|
||||
@@ -24,9 +24,7 @@ import android.graphics.Canvas
|
||||
import android.graphics.Paint
|
||||
import android.graphics.Path
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
@@ -46,44 +44,28 @@ import java.util.concurrent.TimeUnit
|
||||
import kotlin.math.cos
|
||||
import kotlin.math.sin
|
||||
|
||||
class PolarViewFragment : Fragment() {
|
||||
class PolarViewFragment : Fragment(R.layout.fragment_polar_view) {
|
||||
|
||||
private val service = Executors.newSingleThreadScheduledExecutor()
|
||||
private val args: PolarViewFragmentArgs by navArgs()
|
||||
|
||||
private var _binding: FragmentPolarViewBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
|
||||
private lateinit var viewModel: MainViewModel
|
||||
private lateinit var satPass: SatPass
|
||||
private lateinit var polarView: PolarView
|
||||
private lateinit var transmitterAdapter: TransmitterAdapter
|
||||
private lateinit var mainActivity: MainActivity
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
mainActivity = activity as MainActivity
|
||||
viewModel = ViewModelProvider(mainActivity).get(MainViewModel::class.java)
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
_binding = FragmentPolarViewBinding.inflate(layoutInflater, container, false)
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
val binding = FragmentPolarViewBinding.bind(view)
|
||||
mainActivity = activity as MainActivity
|
||||
viewModel = ViewModelProvider(mainActivity).get(MainViewModel::class.java)
|
||||
viewModel.getSatPassList().value?.let {
|
||||
val refreshRate = viewModel.getRefreshRate()
|
||||
satPass = it[args.satPassIndex]
|
||||
mainActivity.supportActionBar?.title = satPass.tle.name
|
||||
|
||||
polarView = PolarView(mainActivity, refreshRate)
|
||||
polarView = PolarView(mainActivity, refreshRate, binding)
|
||||
binding.framePolar.addView(polarView)
|
||||
service.scheduleAtFixedRate(
|
||||
{ polarView.invalidate() },
|
||||
@@ -92,11 +74,11 @@ class PolarViewFragment : Fragment() {
|
||||
TimeUnit.MILLISECONDS
|
||||
)
|
||||
|
||||
setupTransRecycler()
|
||||
setupTransRecycler(binding)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupTransRecycler() {
|
||||
private fun setupTransRecycler(binding: FragmentPolarViewBinding) {
|
||||
transmitterAdapter = TransmitterAdapter()
|
||||
binding.recPolar.apply {
|
||||
layoutManager = LinearLayoutManager(mainActivity)
|
||||
@@ -114,7 +96,12 @@ class PolarViewFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
|
||||
inner class PolarView(context: Context, updateFreq: Long) : View(context) {
|
||||
inner class PolarView(
|
||||
context: Context,
|
||||
private val updateFreq: Long,
|
||||
private val binding: FragmentPolarViewBinding
|
||||
) :
|
||||
View(context) {
|
||||
|
||||
private val radarSize = resources.displayMetrics.widthPixels
|
||||
private val scale = resources.displayMetrics.density
|
||||
@@ -124,7 +111,6 @@ class PolarViewFragment : Fragment() {
|
||||
private val piDiv2 = Math.PI / 2.0
|
||||
private val txtSize = scale * 15
|
||||
private val center = 0f
|
||||
private val delay = updateFreq
|
||||
|
||||
private val radarPaint = Paint().apply {
|
||||
isAntiAlias = true
|
||||
@@ -223,7 +209,7 @@ class PolarViewFragment : Fragment() {
|
||||
} else {
|
||||
path.lineTo(satPassX, satPassY)
|
||||
}
|
||||
startTime.time += delay
|
||||
startTime.time += updateFreq
|
||||
}
|
||||
cvs.drawPath(path, trackPaint)
|
||||
}
|
||||
@@ -253,9 +239,4 @@ class PolarViewFragment : Fragment() {
|
||||
return value * 180 / Math.PI
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
_binding = null
|
||||
super.onDestroyView()
|
||||
}
|
||||
}
|
||||
@@ -36,15 +36,12 @@ class SatEntryDialog : AppCompatDialogFragment(), SearchView.OnQueryTextListener
|
||||
private lateinit var satEntryAdapter: SatEntryAdapter
|
||||
private lateinit var entriesListener: EntriesSubmitListener
|
||||
|
||||
private var _binding: DialogSatEntryBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
|
||||
private var entriesList = mutableListOf<SatEntry>()
|
||||
private var selectionList = mutableListOf<Int>()
|
||||
private var selectAllToggle = true
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
_binding = DialogSatEntryBinding.inflate(requireActivity().layoutInflater)
|
||||
val binding = DialogSatEntryBinding.inflate(requireActivity().layoutInflater)
|
||||
val satEntryDialog = Dialog(requireActivity()).apply {
|
||||
window?.requestFeature(Window.FEATURE_NO_TITLE)
|
||||
setContentView(binding.root)
|
||||
@@ -147,9 +144,4 @@ class SatEntryDialog : AppCompatDialogFragment(), SearchView.OnQueryTextListener
|
||||
interface EntriesSubmitListener {
|
||||
fun onEntriesSubmit(list: MutableList<Int>)
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
_binding = null
|
||||
super.onDestroyView()
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user