diff --git a/app/build.gradle b/app/build.gradle index 32d7f572..e597ae2b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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" } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt b/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt index 977ff5de..170539bc 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt @@ -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 diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapViewFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapViewFragment.kt index c9266a1c..a8cd39b5 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapViewFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapViewFragment.kt @@ -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 diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarViewFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarViewFragment.kt index 4c6773a7..b7fe0276 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarViewFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarViewFragment.kt @@ -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) } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PreferencesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PreferencesFragment.kt index 8effc0f5..13c747d7 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PreferencesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PreferencesFragment.kt @@ -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 { diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/views/MapView.kt b/app/src/main/java/com/rtbishop/look4sat/ui/views/MapView.kt index a09329e1..ce241036 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/views/MapView.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/views/MapView.kt @@ -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 diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/views/PolarView.kt b/app/src/main/java/com/rtbishop/look4sat/ui/views/PolarView.kt index 3088772b..09988a79 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/views/PolarView.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/views/PolarView.kt @@ -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() + } } \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/utility/Extensions.kt b/app/src/main/java/com/rtbishop/look4sat/utility/Extensions.kt new file mode 100644 index 00000000..fe32e8be --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/utility/Extensions.kt @@ -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() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/utility/GeneralUtils.kt b/app/src/main/java/com/rtbishop/look4sat/utility/GeneralUtils.kt deleted file mode 100644 index 837f0ea9..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/utility/GeneralUtils.kt +++ /dev/null @@ -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() } - } -} \ No newline at end of file diff --git a/app/src/main/res/raw/customrender.xml b/app/src/main/res/raw/customrender.xml deleted file mode 100644 index 9c939634..00000000 --- a/app/src/main/res/raw/customrender.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - diff --git a/app/src/main/res/raw/world.map b/app/src/main/res/raw/world.map deleted file mode 100644 index 03f9fd2a..00000000 Binary files a/app/src/main/res/raw/world.map and /dev/null differ diff --git a/build.gradle b/build.gradle index 3e2964cd..aeccdf65 100644 --- a/build.gradle +++ b/build.gradle @@ -17,18 +17,32 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - buildscript { + ext.gradle_version = '4.0.0' + ext.gradle_plugin_version = '1.3.72' + ext.material_version = '1.1.0' + ext.app_compat_version = '1.1.0' + ext.support_lib_version = '1.0.0' + ext.constraint_layout_version = '1.1.3' + ext.ktx_version = '1.3.0' + ext.preference_version = '1.1.1' + ext.navigation_version = '2.3.0' + ext.lifecycle_version = '2.2.0' + ext.room_version = '2.2.5' + ext.dagger_version = '2.28.1' + ext.retrofit_version = '2.9.0' + ext.okhttp_version = '4.7.2' + ext.openStreetMap_version = '6.1.6' + ext.predict4java_version = '1.3.1' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:4.0.1' - classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.2.2" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.10" + classpath "com.android.tools.build:gradle:$gradle_version" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$gradle_plugin_version" + classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version" } } @@ -42,25 +56,3 @@ allprojects { task clean(type: Delete) { delete rootProject.buildDir } - -ext { - material = '1.1.0' - appCompat = '1.1.0' - supportLib = '1.0.0' - constraintLayout = '1.1.3' - ktx = '1.3.0' - preference = '1.1.1' - navigation = '2.2.2' - lifecycle = '2.2.0' - room = '2.2.5' - - dagger = '2.28' - - retrofit = '2.9.0' - okhttp = '4.7.2' - - openStreetMap = '6.1.6' - mapsForge = '0.13.0' - - predict4java = '1.3.1' -}