mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Fixed recent InflationException, version code bumped
This commit is contained in:
1 parent
39c3a69a11
commit
b2deab0d7c
7 files changed
+38
-30
No files matched your search
+2
-2
@@ -13,8 +13,8 @@ android {
|
|||||||
applicationId "com.rtbishop.look4sat"
|
applicationId "com.rtbishop.look4sat"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 30
|
targetSdkVersion 30
|
||||||
versionCode 230
|
versionCode 231
|
||||||
versionName "2.3.0"
|
versionName "2.3.1"
|
||||||
kapt {
|
kapt {
|
||||||
arguments {
|
arguments {
|
||||||
arg("room.schemaLocation", "$projectDir/schemas")
|
arg("room.schemaLocation", "$projectDir/schemas")
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import androidx.fragment.app.viewModels
|
|||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||||
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
import com.rtbishop.look4sat.data.model.Result
|
import com.rtbishop.look4sat.data.model.Result
|
||||||
import com.rtbishop.look4sat.data.model.SatItem
|
import com.rtbishop.look4sat.data.model.SatItem
|
||||||
@@ -32,7 +33,6 @@ import com.rtbishop.look4sat.data.model.TleSource
|
|||||||
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
|
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
|
||||||
import com.rtbishop.look4sat.utility.RecyclerDivider
|
import com.rtbishop.look4sat.utility.RecyclerDivider
|
||||||
import com.rtbishop.look4sat.utility.getNavResult
|
import com.rtbishop.look4sat.utility.getNavResult
|
||||||
import com.rtbishop.look4sat.utility.showSnack
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
@@ -94,7 +94,8 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
|||||||
is Result.Error -> {
|
is Result.Error -> {
|
||||||
binding.entriesProgress.visibility = View.INVISIBLE
|
binding.entriesProgress.visibility = View.INVISIBLE
|
||||||
binding.entriesRecycler.visibility = View.VISIBLE
|
binding.entriesRecycler.visibility = View.VISIBLE
|
||||||
requireView().showSnack(getString(R.string.entries_update_error))
|
Snackbar.make(requireView(), R.string.entries_update_error, Snackbar.LENGTH_SHORT)
|
||||||
|
.setAnchorView(R.id.nav_bottom).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,7 +142,6 @@ class EntriesViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun filterByQuery(items: List<SatItem>, query: String): List<SatItem> {
|
private fun filterByQuery(items: List<SatItem>, query: String): List<SatItem> {
|
||||||
shouldSelectAll = true
|
|
||||||
if (query.isBlank()) return items
|
if (query.isBlank()) return items
|
||||||
return try {
|
return try {
|
||||||
items.filter { it.catNum == query.toInt() }
|
items.filter { it.catNum == query.toInt() }
|
||||||
|
|||||||
@@ -26,61 +26,64 @@ import androidx.activity.result.contract.ActivityResultContracts
|
|||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
import com.rtbishop.look4sat.utility.PrefsManager
|
import com.rtbishop.look4sat.utility.PrefsManager
|
||||||
import com.rtbishop.look4sat.utility.QthConverter
|
import com.rtbishop.look4sat.utility.QthConverter
|
||||||
import com.rtbishop.look4sat.utility.round
|
import com.rtbishop.look4sat.utility.round
|
||||||
import com.rtbishop.look4sat.utility.showSnack
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class PrefsFragment : PreferenceFragmentCompat() {
|
class PrefsFragment : PreferenceFragmentCompat() {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var locationManager: LocationManager
|
lateinit var locationManager: LocationManager
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var prefsManager: PrefsManager
|
lateinit var prefsManager: PrefsManager
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var qthConverter: QthConverter
|
lateinit var qthConverter: QthConverter
|
||||||
|
|
||||||
private val requestPermissionLauncher =
|
private val requestPermissionLauncher =
|
||||||
registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
|
registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
|
||||||
if (isGranted) setPositionFromGPS()
|
if (isGranted) {
|
||||||
else requireView().showSnack(getString(R.string.pref_pos_gps_error))
|
setPositionFromGPS()
|
||||||
|
} else {
|
||||||
|
showSnack(getString(R.string.pref_pos_gps_error))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
setPreferencesFromResource(R.xml.preference, rootKey)
|
setPreferencesFromResource(R.xml.preference, rootKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
findPreference<Preference>(PrefsManager.keyPositionGPS)?.apply {
|
findPreference<Preference>(PrefsManager.keyPositionGPS)?.apply {
|
||||||
setOnPreferenceClickListener {
|
setOnPreferenceClickListener {
|
||||||
setPositionFromGPS()
|
setPositionFromGPS()
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
findPreference<Preference>(PrefsManager.keyPositionQTH)?.apply {
|
findPreference<Preference>(PrefsManager.keyPositionQTH)?.apply {
|
||||||
setOnPreferenceChangeListener { _, newValue ->
|
setOnPreferenceChangeListener { _, newValue ->
|
||||||
setPositionFromQth(newValue.toString())
|
setPositionFromQth(newValue.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setPositionFromQth(qthString: String): Boolean {
|
private fun setPositionFromQth(qthString: String): Boolean {
|
||||||
qthConverter.qthToLocation(qthString)?.let { gsp ->
|
qthConverter.qthToLocation(qthString)?.let { gsp ->
|
||||||
prefsManager.setStationPosition(gsp.latitude, gsp.longitude, gsp.heightAMSL)
|
prefsManager.setStationPosition(gsp.latitude, gsp.longitude, gsp.heightAMSL)
|
||||||
requireView().showSnack(getString(R.string.pref_pos_success))
|
showSnack(getString(R.string.pref_pos_success))
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
requireView().showSnack(getString(R.string.pref_pos_qth_error))
|
showSnack(getString(R.string.pref_pos_qth_error))
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setPositionFromGPS() {
|
private fun setPositionFromGPS() {
|
||||||
val locPermString = Manifest.permission.ACCESS_FINE_LOCATION
|
val locPermString = Manifest.permission.ACCESS_FINE_LOCATION
|
||||||
val locPermResult = ContextCompat.checkSelfPermission(requireContext(), locPermString)
|
val locPermResult = ContextCompat.checkSelfPermission(requireContext(), locPermString)
|
||||||
@@ -91,8 +94,14 @@ class PrefsFragment : PreferenceFragmentCompat() {
|
|||||||
val longitude = location.longitude.round(4)
|
val longitude = location.longitude.round(4)
|
||||||
val altitude = location.altitude.round(1)
|
val altitude = location.altitude.round(1)
|
||||||
prefsManager.setStationPosition(latitude, longitude, altitude)
|
prefsManager.setStationPosition(latitude, longitude, altitude)
|
||||||
requireView().showSnack(getString(R.string.pref_pos_success))
|
showSnack(getString(R.string.pref_pos_success))
|
||||||
} else requireView().showSnack(getString(R.string.pref_pos_gps_null))
|
} else showSnack(getString(R.string.pref_pos_gps_null))
|
||||||
} else requestPermissionLauncher.launch(locPermString)
|
} else requestPermissionLauncher.launch(locPermString)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun showSnack(message: String) {
|
||||||
|
Snackbar.make(requireView(), message, Snackbar.LENGTH_SHORT)
|
||||||
|
.setAnchorView(R.id.nav_bottom)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,6 @@ import android.net.Network
|
|||||||
import android.net.NetworkCapabilities
|
import android.net.NetworkCapabilities
|
||||||
import android.net.NetworkRequest
|
import android.net.NetworkRequest
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
|
||||||
import androidx.annotation.IdRes
|
import androidx.annotation.IdRes
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
@@ -34,8 +33,6 @@ import androidx.navigation.Navigator
|
|||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import com.github.amsacode.predict4java.GroundStationPosition
|
import com.github.amsacode.predict4java.GroundStationPosition
|
||||||
import com.github.amsacode.predict4java.Satellite
|
import com.github.amsacode.predict4java.Satellite
|
||||||
import com.google.android.material.snackbar.Snackbar
|
|
||||||
import com.rtbishop.look4sat.R
|
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.channels.awaitClose
|
import kotlinx.coroutines.channels.awaitClose
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
@@ -80,12 +77,6 @@ fun Satellite.getPredictor(stationPosition: GroundStationPosition): PassPredicto
|
|||||||
return PassPredictor(this, stationPosition)
|
return PassPredictor(this, stationPosition)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun View.showSnack(message: String) {
|
|
||||||
Snackbar.make(this, message, Snackbar.LENGTH_SHORT)
|
|
||||||
.setAnchorView(R.id.nav_bottom)
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun NavController.navigateSafe(
|
fun NavController.navigateSafe(
|
||||||
@IdRes resId: Int,
|
@IdRes resId: Int,
|
||||||
args: Bundle? = null,
|
args: Bundle? = null,
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
Added satellite items filtering by transmitter mode
|
||||||
|
Now updating recyclers views asyncronously
|
||||||
|
Switched to concurrent satellite data update
|
||||||
|
Minor visual changes to map info
|
||||||
|
Separated application screens logic
|
||||||
|
Bug fixes, huge code cleanup
|
||||||
|
Fixed recent InflatingException
|
||||||
@@ -3,4 +3,5 @@ Now updating recyclers views asyncronously
|
|||||||
Switched to concurrent satellite data update
|
Switched to concurrent satellite data update
|
||||||
Minor visual changes to map info
|
Minor visual changes to map info
|
||||||
Separated application screens logic
|
Separated application screens logic
|
||||||
Bug fixes, huge code cleanup
|
Bug fixes, huge code cleanup
|
||||||
|
Fixed recent InflatingException
|
||||||
Reference in new issue
Block a user