mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Switched to using SafeArgs plugin for data transfer
This commit is contained in:
1 parent
72f71b2153
commit
8b8c443bd1
8 files changed
+74
-58
No files matched your search
+4
-3
@@ -3,6 +3,7 @@ plugins {
|
||||
id "org.jetbrains.kotlin.android"
|
||||
id "org.jetbrains.kotlin.kapt"
|
||||
id "dagger.hilt.android.plugin"
|
||||
id "androidx.navigation.safeargs.kotlin"
|
||||
}
|
||||
|
||||
android {
|
||||
@@ -61,9 +62,9 @@ dependencies {
|
||||
implementation "com.google.android.material:material:1.5.0"
|
||||
implementation "androidx.constraintlayout:constraintlayout:2.1.3"
|
||||
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0"
|
||||
implementation "androidx.navigation:navigation-fragment-ktx:2.4.0"
|
||||
implementation "androidx.navigation:navigation-ui-ktx:2.4.0"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
|
||||
implementation "androidx.navigation:navigation-fragment-ktx:2.4.1"
|
||||
implementation "androidx.navigation:navigation-ui-ktx:2.4.1"
|
||||
implementation "androidx.room:room-runtime:2.4.1"
|
||||
implementation "androidx.room:room-ktx:2.4.1"
|
||||
kapt "androidx.room:room-compiler:2.4.1"
|
||||
|
||||
@@ -20,7 +20,6 @@ package com.rtbishop.look4sat.presentation
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.content.res.Resources
|
||||
import android.os.Bundle
|
||||
import android.widget.EditText
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.Toast
|
||||
@@ -29,9 +28,6 @@ import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.LifecycleEventObserver
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavOptions
|
||||
import androidx.navigation.Navigator
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import java.net.InetSocketAddress
|
||||
import java.net.Socket
|
||||
@@ -51,18 +47,6 @@ fun SharedPreferences.Editor.putDouble(key: String, double: Double) {
|
||||
putLong(key, double.toRawBits())
|
||||
}
|
||||
|
||||
fun NavController.navigateSafe(
|
||||
@IdRes resId: Int,
|
||||
args: Bundle? = null,
|
||||
options: NavOptions? = null,
|
||||
extras: Navigator.Extras? = null
|
||||
) {
|
||||
val action = currentDestination?.getAction(resId) ?: graph.getAction(resId)
|
||||
if (action != null && currentDestination?.id != action.destinationId) {
|
||||
navigate(resId, args, options, extras)
|
||||
}
|
||||
}
|
||||
|
||||
fun <T> Fragment.getNavResult(@IdRes id: Int, key: String, onResult: (result: T) -> Unit) {
|
||||
val backStackEntry = findNavController().getBackStackEntry(id)
|
||||
val observer = LifecycleEventObserver { _, event ->
|
||||
|
||||
@@ -28,6 +28,7 @@ import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.fragment.navArgs
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.FragmentMapBinding
|
||||
import com.rtbishop.look4sat.domain.predict.GeoPos
|
||||
@@ -50,6 +51,7 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
||||
@Inject
|
||||
lateinit var sharedPreferences: SharedPreferences
|
||||
|
||||
private val args: MapFragmentArgs by navArgs()
|
||||
private val viewModel: MapViewModel by viewModels()
|
||||
private val minLat = MapView.getTileSystem().minLatitude
|
||||
private val maxLat = MapView.getTileSystem().maxLatitude
|
||||
@@ -91,7 +93,7 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
||||
}
|
||||
|
||||
private fun setupObservers(binding: FragmentMapBinding) {
|
||||
viewModel.selectDefaultSatellite(arguments?.getInt("catNum"))
|
||||
viewModel.selectDefaultSatellite(args.catNum)
|
||||
viewModel.stationPosLiveData.observe(viewLifecycleOwner) { renderStationPos(it, binding) }
|
||||
viewModel.satPositions.observe(viewLifecycleOwner) { renderSatPositions(it, binding) }
|
||||
viewModel.satTrack.observe(viewLifecycleOwner) { renderSatTrack(it, binding) }
|
||||
|
||||
+17
-8
@@ -20,7 +20,6 @@ package com.rtbishop.look4sat.presentation.passesScreen
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
@@ -33,7 +32,6 @@ import com.rtbishop.look4sat.databinding.FragmentPassesBinding
|
||||
import com.rtbishop.look4sat.domain.model.DataState
|
||||
import com.rtbishop.look4sat.domain.predict.SatPass
|
||||
import com.rtbishop.look4sat.presentation.getNavResult
|
||||
import com.rtbishop.look4sat.presentation.navigateSafe
|
||||
import com.rtbishop.look4sat.presentation.toTimerString
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
|
||||
@@ -71,9 +69,8 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
|
||||
setProgressBackgroundColorSchemeResource(R.color.themeAccent)
|
||||
setOnRefreshListener { passesViewModel.forceCalculation() }
|
||||
}
|
||||
passesFilter.setOnClickListener { findNavController().navigate(R.id.nav_pass_prefs) }
|
||||
passesSettings.setOnClickListener { findNavController().navigate(R.id.nav_settings) }
|
||||
// passesFab.setOnClickListener { findNavController().navigate(R.id.nav_satellites) }
|
||||
passesFilter.setOnClickListener { navigateToPassPrefs() }
|
||||
passesSettings.setOnClickListener { navigateToSettings() }
|
||||
}
|
||||
passesViewModel.passes.observe(viewLifecycleOwner) { passesResult ->
|
||||
handleNewPasses(passesResult, adapter, binding)
|
||||
@@ -85,7 +82,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
|
||||
Toast.makeText(requireContext(), "Nothing to show", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
} else {
|
||||
binding.passesFab.setOnClickListener { findNavController().navigate(R.id.nav_satellites) }
|
||||
binding.passesFab.setOnClickListener { findNavController().navigate(R.id.nav_entries) }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -95,6 +92,16 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
|
||||
}
|
||||
}
|
||||
|
||||
private fun navigateToPassPrefs() {
|
||||
val direction = PassesFragmentDirections.actionPassesToPassPrefs()
|
||||
findNavController().navigate(direction)
|
||||
}
|
||||
|
||||
private fun navigateToSettings() {
|
||||
val direction = PassesFragmentDirections.actionGlobalSettingsFragment()
|
||||
findNavController().navigate(direction)
|
||||
}
|
||||
|
||||
private fun handleNewPasses(
|
||||
dataState: DataState<List<SatPass>>,
|
||||
passesAdapter: PassesAdapter,
|
||||
@@ -148,8 +155,10 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
|
||||
|
||||
override fun navigateToPass(satPass: SatPass) {
|
||||
if (satPass.progress < 100) {
|
||||
val bundle = bundleOf("catNum" to satPass.catNum, "aosTime" to satPass.aosTime)
|
||||
findNavController().navigateSafe(R.id.action_passes_to_radar, bundle)
|
||||
val catNum = satPass.catNum
|
||||
val aosTime = satPass.aosTime
|
||||
val action = PassesFragmentDirections.actionGlobalRadarFragment(catNum, aosTime)
|
||||
findNavController().navigate(action)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,10 +19,10 @@ package com.rtbishop.look4sat.presentation.radarScreen
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.fragment.navArgs
|
||||
import androidx.recyclerview.widget.DividerItemDecoration
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||
@@ -31,7 +31,6 @@ import com.rtbishop.look4sat.data.ISettingsHandler
|
||||
import com.rtbishop.look4sat.databinding.FragmentRadarBinding
|
||||
import com.rtbishop.look4sat.domain.predict.SatPass
|
||||
import com.rtbishop.look4sat.domain.predict.SatPos
|
||||
import com.rtbishop.look4sat.presentation.navigateSafe
|
||||
import com.rtbishop.look4sat.presentation.toTimerString
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import javax.inject.Inject
|
||||
@@ -41,6 +40,7 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
|
||||
|
||||
@Inject
|
||||
lateinit var preferences: ISettingsHandler
|
||||
private val args: RadarFragmentArgs by navArgs()
|
||||
private val viewModel: RadarViewModel by viewModels()
|
||||
private var radarView: RadarView? = null
|
||||
|
||||
@@ -70,9 +70,7 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
|
||||
transmittersAdapter: TransmittersAdapter,
|
||||
binding: FragmentRadarBinding
|
||||
) {
|
||||
val catNum = requireArguments().getInt("catNum")
|
||||
val aosTime = requireArguments().getLong("aosTime")
|
||||
viewModel.getPass(catNum, aosTime).observe(viewLifecycleOwner) { pass ->
|
||||
viewModel.getPass(args.catNum, args.aosTime).observe(viewLifecycleOwner) { pass ->
|
||||
radarView = RadarView(requireContext()).apply {
|
||||
setShowAim(preferences.getUseCompass())
|
||||
setScanning(preferences.getShowSweep())
|
||||
@@ -99,11 +97,13 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
|
||||
orientation.third
|
||||
)
|
||||
}
|
||||
binding.radarMap.setOnClickListener {
|
||||
val bundle = bundleOf("catNum" to pass.catNum)
|
||||
findNavController().navigateSafe(R.id.action_radar_to_map, bundle)
|
||||
binding.radarMap.setOnClickListener { navigateToMap(pass.catNum) }
|
||||
}
|
||||
}
|
||||
|
||||
private fun navigateToMap(catnum: Int) {
|
||||
val direction = RadarFragmentDirections.actionGlobalMapFragment(catnum)
|
||||
findNavController().navigate(direction)
|
||||
}
|
||||
|
||||
private fun setPassText(satPass: SatPass, satPos: SatPos, binding: FragmentRadarBinding) {
|
||||
|
||||
+6
-2
@@ -37,7 +37,10 @@ import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.FragmentSettingsBinding
|
||||
import com.rtbishop.look4sat.domain.model.DataState
|
||||
import com.rtbishop.look4sat.domain.predict.GeoPos
|
||||
import com.rtbishop.look4sat.presentation.*
|
||||
import com.rtbishop.look4sat.presentation.getNavResult
|
||||
import com.rtbishop.look4sat.presentation.isValidIPv4
|
||||
import com.rtbishop.look4sat.presentation.isValidPort
|
||||
import com.rtbishop.look4sat.presentation.setEditText
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
|
||||
@AndroidEntryPoint
|
||||
@@ -114,7 +117,8 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
||||
private fun setupDataCard(binding: FragmentSettingsBinding) {
|
||||
binding.prefsData.updateBtnFile.setOnClickListener { contentRequest.launch("*/*") }
|
||||
binding.prefsData.updateBtnWeb.setOnClickListener {
|
||||
findNavController().navigateSafe(R.id.action_prefs_to_sources)
|
||||
val action = SettingsFragmentDirections.actionPrefsToSources()
|
||||
findNavController().navigate(action)
|
||||
}
|
||||
binding.prefsData.updateBtnClear.setOnClickListener { viewModel.clearData() }
|
||||
getNavResult<List<String>>(R.id.nav_settings, "sources") { sources ->
|
||||
|
||||
@@ -5,39 +5,43 @@
|
||||
android:id="@+id/nav_root"
|
||||
app:startDestination="@id/nav_passes">
|
||||
<fragment
|
||||
android:id="@+id/nav_satellites"
|
||||
android:id="@+id/nav_entries"
|
||||
android:name="com.rtbishop.look4sat.presentation.entriesScreen.EntriesFragment"
|
||||
tools:layout="@layout/fragment_entries">
|
||||
</fragment>
|
||||
tools:layout="@layout/fragment_entries" />
|
||||
<fragment
|
||||
android:id="@+id/nav_passes"
|
||||
android:name="com.rtbishop.look4sat.presentation.passesScreen.PassesFragment"
|
||||
tools:layout="@layout/fragment_passes">
|
||||
<action
|
||||
android:id="@+id/action_passes_to_entries"
|
||||
app:destination="@id/nav_satellites" />
|
||||
<action
|
||||
android:id="@+id/action_passes_to_pass_prefs"
|
||||
app:destination="@id/nav_pass_prefs" />
|
||||
<action
|
||||
android:id="@+id/action_passes_to_prefs"
|
||||
app:destination="@id/nav_settings" />
|
||||
<action
|
||||
android:id="@+id/action_passes_to_radar"
|
||||
app:destination="@id/nav_radar" />
|
||||
</fragment>
|
||||
<dialog
|
||||
android:id="@+id/nav_pass_prefs"
|
||||
android:name="com.rtbishop.look4sat.presentation.passesScreen.PassesPrefsDialog"
|
||||
tools:layout="@layout/dialog_passes" />
|
||||
<fragment
|
||||
android:id="@+id/nav_radar"
|
||||
android:name="com.rtbishop.look4sat.presentation.radarScreen.RadarFragment"
|
||||
tools:layout="@layout/fragment_radar">
|
||||
<action
|
||||
android:id="@+id/action_radar_to_map"
|
||||
app:destination="@id/nav_map" />
|
||||
<argument
|
||||
android:name="catNum"
|
||||
android:defaultValue="0"
|
||||
app:argType="integer" />
|
||||
<argument
|
||||
android:name="aosTime"
|
||||
android:defaultValue="0L"
|
||||
app:argType="long" />
|
||||
</fragment>
|
||||
<fragment
|
||||
android:id="@+id/nav_map"
|
||||
android:name="com.rtbishop.look4sat.presentation.mapScreen.MapFragment"
|
||||
tools:layout="@layout/fragment_map" />
|
||||
tools:layout="@layout/fragment_map">
|
||||
<argument
|
||||
android:name="catNum"
|
||||
android:defaultValue="0"
|
||||
app:argType="integer" />
|
||||
</fragment>
|
||||
<fragment
|
||||
android:id="@+id/nav_settings"
|
||||
android:name="com.rtbishop.look4sat.presentation.settingsScreen.SettingsFragment"
|
||||
@@ -46,12 +50,23 @@
|
||||
android:id="@+id/action_prefs_to_sources"
|
||||
app:destination="@id/nav_sources" />
|
||||
</fragment>
|
||||
<dialog
|
||||
android:id="@+id/nav_pass_prefs"
|
||||
android:name="com.rtbishop.look4sat.presentation.passesScreen.PassesPrefsDialog"
|
||||
tools:layout="@layout/dialog_passes" />
|
||||
<dialog
|
||||
android:id="@+id/nav_sources"
|
||||
android:name="com.rtbishop.look4sat.presentation.sourcesScreen.SourcesDialog"
|
||||
tools:layout="@layout/dialog_sources" />
|
||||
<action
|
||||
android:id="@+id/action_global_entriesFragment"
|
||||
app:destination="@id/nav_entries" />
|
||||
<action
|
||||
android:id="@+id/action_global_passesFragment"
|
||||
app:destination="@id/nav_passes" />
|
||||
<action
|
||||
android:id="@+id/action_global_radarFragment"
|
||||
app:destination="@id/nav_radar" />
|
||||
<action
|
||||
android:id="@+id/action_global_mapFragment"
|
||||
app:destination="@id/nav_map" />
|
||||
<action
|
||||
android:id="@+id/action_global_settingsFragment"
|
||||
app:destination="@id/nav_settings" />
|
||||
</navigation>
|
||||
@@ -1,6 +1,7 @@
|
||||
buildscript {
|
||||
dependencies {
|
||||
classpath "com.google.dagger:hilt-android-gradle-plugin:2.40.5"
|
||||
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.4.1"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user