mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Rebased from master
This commit is contained in:
1 parent
e90322d828
commit
8c56c31b8c
12 files changed
+93
-132
No files matched your search
+23
-27
@@ -62,35 +62,31 @@ android {
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation "com.google.android.material:material:$material"
|
||||
implementation "androidx.appcompat:appcompat:$appCompat"
|
||||
implementation "androidx.legacy:legacy-support-v4:$supportLib"
|
||||
implementation "androidx.constraintlayout:constraintlayout:$constraintLayout"
|
||||
implementation "androidx.core:core-ktx:$ktx"
|
||||
implementation "androidx.preference:preference:$preference"
|
||||
implementation "androidx.navigation:navigation-fragment-ktx:$navigation"
|
||||
implementation "androidx.navigation:navigation-runtime-ktx:$navigation"
|
||||
implementation "androidx.navigation:navigation-ui-ktx:$navigation"
|
||||
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle"
|
||||
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle"
|
||||
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle"
|
||||
implementation "androidx.room:room-runtime:$room"
|
||||
implementation "androidx.room:room-ktx:$room"
|
||||
kapt "androidx.room:room-compiler:$room"
|
||||
implementation "com.google.android.material:material:$material_version"
|
||||
implementation "androidx.appcompat:appcompat:$app_compat_version"
|
||||
implementation "androidx.legacy:legacy-support-v4:$support_lib_version"
|
||||
implementation "androidx.constraintlayout:constraintlayout:$constraint_layout_version"
|
||||
implementation "androidx.core:core-ktx:$ktx_version"
|
||||
implementation "androidx.preference:preference:$preference_version"
|
||||
implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version"
|
||||
implementation "androidx.navigation:navigation-runtime-ktx:$navigation_version"
|
||||
implementation "androidx.navigation:navigation-ui-ktx:$navigation_version"
|
||||
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
|
||||
implementation "androidx.room:room-runtime:$room_version"
|
||||
implementation "androidx.room:room-ktx:$room_version"
|
||||
kapt "androidx.room:room-compiler:$room_version"
|
||||
|
||||
implementation "com.google.dagger:dagger:$dagger"
|
||||
kapt "com.google.dagger:dagger-compiler:$dagger"
|
||||
implementation "com.google.dagger:dagger:$dagger_version"
|
||||
kapt "com.google.dagger:dagger-compiler:$dagger_version"
|
||||
|
||||
implementation "com.squareup.retrofit2:retrofit:$retrofit"
|
||||
implementation "com.squareup.retrofit2:converter-gson:$retrofit"
|
||||
implementation "com.squareup.okhttp3:okhttp:$okhttp"
|
||||
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
|
||||
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
|
||||
implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
|
||||
|
||||
implementation "org.osmdroid:osmdroid-android:$openStreetMap"
|
||||
implementation "org.osmdroid:osmdroid-mapsforge:$openStreetMap"
|
||||
implementation "org.mapsforge:mapsforge-map-android:$mapsForge"
|
||||
implementation "org.mapsforge:mapsforge-map:$mapsForge"
|
||||
implementation "org.mapsforge:mapsforge-themes:$mapsForge"
|
||||
implementation "org.osmdroid:osmdroid-android:$openStreetMap_version"
|
||||
|
||||
implementation "com.github.davidmoten:predict4java:$predict4java"
|
||||
implementation "com.github.davidmoten:predict4java:$predict4java_version"
|
||||
}
|
||||
@@ -47,7 +47,7 @@ import com.rtbishop.look4sat.data.TleSource
|
||||
import com.rtbishop.look4sat.databinding.ActivityMainBinding
|
||||
import com.rtbishop.look4sat.databinding.DrawerHeaderBinding
|
||||
import com.rtbishop.look4sat.ui.fragments.TleSourcesDialogFragment
|
||||
import com.rtbishop.look4sat.utility.GeneralUtils.toast
|
||||
import com.rtbishop.look4sat.utility.Extensions.toast
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -36,11 +36,11 @@ import com.rtbishop.look4sat.databinding.FragmentMapViewBinding
|
||||
import com.rtbishop.look4sat.ui.MainActivity
|
||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
||||
import com.rtbishop.look4sat.ui.views.MapView
|
||||
import com.rtbishop.look4sat.utility.GeneralUtils
|
||||
import com.rtbishop.look4sat.utility.GeneralUtils.toast
|
||||
import com.rtbishop.look4sat.utility.Extensions.toast
|
||||
import com.rtbishop.look4sat.utility.PassPredictor
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class MapViewFragment : Fragment(R.layout.fragment_map_view) {
|
||||
@@ -60,7 +60,7 @@ class MapViewFragment : Fragment(R.layout.fragment_map_view) {
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
binding = FragmentMapViewBinding.bind(view)
|
||||
mainActivity = activity as MainActivity
|
||||
mainActivity = requireActivity() as MainActivity
|
||||
(mainActivity.application as Look4SatApp).appComponent.inject(this)
|
||||
viewModel = ViewModelProvider(mainActivity, modelFactory).get(SharedViewModel::class.java)
|
||||
setupObservers(binding)
|
||||
@@ -106,7 +106,7 @@ class MapViewFragment : Fragment(R.layout.fragment_map_view) {
|
||||
lifecycleScope.launch {
|
||||
while (true) {
|
||||
mapView.invalidate()
|
||||
setTextViewsToSelectedSatPos()
|
||||
setDataToTextViews()
|
||||
delay(viewModel.getRefreshRate())
|
||||
}
|
||||
}
|
||||
@@ -133,12 +133,12 @@ class MapViewFragment : Fragment(R.layout.fragment_map_view) {
|
||||
.show()
|
||||
}
|
||||
|
||||
private fun setTextViewsToSelectedSatPos() {
|
||||
val currentTime = GeneralUtils.getDateFor(System.currentTimeMillis())
|
||||
private fun setDataToTextViews() {
|
||||
val currentTime = Date(System.currentTimeMillis())
|
||||
val orbitalPeriod = (24 * 60 / selectedSat.meanmo).toInt()
|
||||
val positions = predictor.getPositions(currentTime, 60, 0, orbitalPeriod * 3)
|
||||
var lon = GeneralUtils.rad2Deg(positions[0].longitude).toFloat()
|
||||
val lat = GeneralUtils.rad2Deg(positions[0].latitude).toFloat()
|
||||
var lon = Math.toDegrees(positions[0].longitude).toFloat()
|
||||
val lat = Math.toDegrees(positions[0].latitude).toFloat()
|
||||
val rng = positions[0].range
|
||||
|
||||
if (lon > 180f) lon -= 360f
|
||||
|
||||
@@ -42,7 +42,6 @@ import com.rtbishop.look4sat.ui.MainActivity
|
||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
||||
import com.rtbishop.look4sat.ui.adapters.TransmitterAdapter
|
||||
import com.rtbishop.look4sat.ui.views.PolarView
|
||||
import com.rtbishop.look4sat.utility.GeneralUtils
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -172,8 +171,8 @@ class PolarViewFragment : Fragment(R.layout.fragment_polar_view), SensorEventLis
|
||||
val polarEl = mainActivity.getString(R.string.pat_elevation)
|
||||
val polarRng = mainActivity.getString(R.string.pat_distance)
|
||||
val polarAlt = mainActivity.getString(R.string.pat_altitude)
|
||||
binding.tvPolarAz.text = String.format(polarAz, GeneralUtils.rad2Deg(satPos.azimuth))
|
||||
binding.tvPolarEl.text = String.format(polarEl, GeneralUtils.rad2Deg(satPos.elevation))
|
||||
binding.tvPolarAz.text = String.format(polarAz, Math.toDegrees(satPos.azimuth))
|
||||
binding.tvPolarEl.text = String.format(polarEl, Math.toDegrees(satPos.elevation))
|
||||
binding.tvPolarRng.text = String.format(polarRng, satPos.range)
|
||||
binding.tvPolarAlt.text = String.format(polarAlt, satPos.altitude)
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ import androidx.preference.PreferenceFragmentCompat
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.ui.MainActivity
|
||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
||||
import com.rtbishop.look4sat.utility.GeneralUtils.toast
|
||||
import com.rtbishop.look4sat.utility.Extensions.toast
|
||||
|
||||
class PreferencesFragment : PreferenceFragmentCompat(),
|
||||
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.rtbishop.look4sat.ui.views
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.graphics.*
|
||||
import android.view.View
|
||||
@@ -10,7 +11,6 @@ import com.github.amsacode.predict4java.SatPos
|
||||
import com.github.amsacode.predict4java.TLE
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.data.SatPass
|
||||
import com.rtbishop.look4sat.utility.GeneralUtils
|
||||
import java.util.*
|
||||
import kotlin.math.abs
|
||||
|
||||
@@ -71,12 +71,13 @@ class MapView(context: Context) : View(context) {
|
||||
selectedSat = passList[checked].tle
|
||||
}
|
||||
|
||||
@SuppressLint("DrawAllocation")
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
degLon = width / 360f
|
||||
degLat = height / 180f
|
||||
canvas.translate(width / 2f, height / 2f)
|
||||
drawHomeLoc(canvas)
|
||||
val currentTime = GeneralUtils.getDateFor(System.currentTimeMillis())
|
||||
val currentTime = Date(System.currentTimeMillis())
|
||||
val orbitalPeriod = (24 * 60 / selectedSat.meanmo).toInt()
|
||||
val predictor = passList[checked].predictor
|
||||
val positions = predictor.getPositions(currentTime, 60, 0, orbitalPeriod * 3)
|
||||
@@ -105,8 +106,8 @@ class MapView(context: Context) : View(context) {
|
||||
var lastLon = 181f
|
||||
|
||||
list.withIndex().forEach { (index, satPos) ->
|
||||
lon = GeneralUtils.rad2Deg(satPos.longitude).toFloat()
|
||||
lat = GeneralUtils.rad2Deg(satPos.latitude).toFloat() * -1
|
||||
lon = Math.toDegrees(satPos.longitude).toFloat()
|
||||
lat = Math.toDegrees(satPos.latitude).toFloat() * -1
|
||||
|
||||
if (lon > 180f) lon -= 360f
|
||||
|
||||
@@ -154,8 +155,8 @@ class MapView(context: Context) : View(context) {
|
||||
}
|
||||
|
||||
private fun drawName(canvas: Canvas, position: SatPos, name: String) {
|
||||
var lon = GeneralUtils.rad2Deg(position.longitude).toFloat()
|
||||
val lat = GeneralUtils.rad2Deg(position.latitude).toFloat() * -1
|
||||
var lon = Math.toDegrees(position.longitude).toFloat()
|
||||
val lat = Math.toDegrees(position.latitude).toFloat() * -1
|
||||
|
||||
if (lon > 180f) lon -= 360f
|
||||
|
||||
|
||||
@@ -8,7 +8,9 @@ import android.view.View
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.data.SatPass
|
||||
import com.rtbishop.look4sat.utility.GeneralUtils
|
||||
import java.util.*
|
||||
import kotlin.math.cos
|
||||
import kotlin.math.sin
|
||||
|
||||
class PolarView(context: Context) : View(context) {
|
||||
|
||||
@@ -23,7 +25,7 @@ class PolarView(context: Context) : View(context) {
|
||||
private val radius = polarWidth * 0.49f
|
||||
private val txtSize = scale * 15
|
||||
private val path: Path = Path()
|
||||
var azimuth = 0f
|
||||
private var azimuth = 0f
|
||||
|
||||
private val radarPaint = Paint().apply {
|
||||
isAntiAlias = true
|
||||
@@ -79,8 +81,8 @@ class PolarView(context: Context) : View(context) {
|
||||
val endTime = satPass.pass.endTime
|
||||
while (startTime.before(endTime)) {
|
||||
val satPos = satPass.predictor.getSatPos(startTime)
|
||||
val x = GeneralUtils.sph2CartX(satPos.azimuth, satPos.elevation, radius.toDouble())
|
||||
val y = GeneralUtils.sph2CartY(satPos.azimuth, satPos.elevation, radius.toDouble())
|
||||
val x = sph2CartX(satPos.azimuth, satPos.elevation, radius.toDouble())
|
||||
val y = sph2CartY(satPos.azimuth, satPos.elevation, radius.toDouble())
|
||||
if (startTime.compareTo(satPass.pass.startTime) == 0) {
|
||||
path.moveTo(x, -y)
|
||||
} else {
|
||||
@@ -92,12 +94,24 @@ class PolarView(context: Context) : View(context) {
|
||||
}
|
||||
|
||||
private fun drawSatellite(cvs: Canvas, satPass: SatPass) {
|
||||
val date = GeneralUtils.getDateFor(System.currentTimeMillis())
|
||||
val date = Date(System.currentTimeMillis())
|
||||
val satPos = satPass.predictor.getSatPos(date)
|
||||
if (satPos.elevation > 0) {
|
||||
val x = GeneralUtils.sph2CartX(satPos.azimuth, satPos.elevation, radius.toDouble())
|
||||
val y = GeneralUtils.sph2CartY(satPos.azimuth, satPos.elevation, radius.toDouble())
|
||||
val x = sph2CartX(satPos.azimuth, satPos.elevation, radius.toDouble())
|
||||
val y = sph2CartY(satPos.azimuth, satPos.elevation, radius.toDouble())
|
||||
cvs.drawCircle(x, -y, txtSize / 3, satPaint)
|
||||
}
|
||||
}
|
||||
|
||||
private fun sph2CartX(azimuth: Double, elevation: Double, r: Double): Float {
|
||||
val piDiv2 = Math.PI / 2.0
|
||||
val radius = r * (piDiv2 - elevation) / piDiv2
|
||||
return (radius * cos(piDiv2 - azimuth)).toFloat()
|
||||
}
|
||||
|
||||
private fun sph2CartY(azimuth: Double, elevation: Double, r: Double): Float {
|
||||
val piDiv2 = Math.PI / 2.0
|
||||
val radius = r * (piDiv2 - elevation) / piDiv2
|
||||
return (radius * sin(piDiv2 - azimuth)).toFloat()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.rtbishop.look4sat.utility
|
||||
|
||||
import android.content.Context
|
||||
import android.widget.Toast
|
||||
|
||||
object Extensions {
|
||||
|
||||
fun String.toast(context: Context, duration: Int = Toast.LENGTH_SHORT): Toast {
|
||||
return Toast.makeText(context, this, duration).apply { show() }
|
||||
}
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
package com.rtbishop.look4sat.utility
|
||||
|
||||
import android.content.Context
|
||||
import android.widget.Toast
|
||||
import java.util.*
|
||||
import kotlin.math.cos
|
||||
import kotlin.math.sin
|
||||
|
||||
object GeneralUtils {
|
||||
|
||||
private const val piDiv2 = Math.PI / 2.0
|
||||
|
||||
fun getDateFor(value: Long): Date {
|
||||
return Date(value)
|
||||
}
|
||||
|
||||
fun rad2Deg(value: Double): Double {
|
||||
return value * 180 / Math.PI
|
||||
}
|
||||
|
||||
fun sph2CartX(azimuth: Double, elevation: Double, r: Double): Float {
|
||||
val radius = r * (piDiv2 - elevation) / piDiv2
|
||||
return (radius * cos(piDiv2 - azimuth)).toFloat()
|
||||
}
|
||||
|
||||
fun sph2CartY(azimuth: Double, elevation: Double, r: Double): Float {
|
||||
val radius = r * (piDiv2 - elevation) / piDiv2
|
||||
return (radius * sin(piDiv2 - azimuth)).toFloat()
|
||||
}
|
||||
|
||||
fun Any.toast(context: Context, duration: Int = Toast.LENGTH_SHORT): Toast {
|
||||
return Toast.makeText(context, this.toString(), duration).apply { show() }
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rendertheme version="5">
|
||||
|
||||
<rule
|
||||
e="way"
|
||||
k="natural"
|
||||
v="issea|sea">
|
||||
<area fill="#242424" />
|
||||
</rule>
|
||||
|
||||
<rule
|
||||
e="way"
|
||||
k="natural"
|
||||
v="nosea">
|
||||
<area fill="#606060" />
|
||||
</rule>
|
||||
|
||||
</rendertheme>
|
||||
Binary file not shown.
Reference in new issue
Block a user