From 68fbd4fc1a6540650af8ed05f35d099dfb777463 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sat, 27 Feb 2021 09:56:08 +0000 Subject: [PATCH] Added several utility extension functions --- .../look4sat/ui/mainScreen/PassesFragment.kt | 10 ++--- .../look4sat/ui/mainScreen/PolarFragment.kt | 10 ++--- .../look4sat/ui/mainScreen/PrefsFragment.kt | 2 +- .../rtbishop/look4sat/utility/Extensions.kt | 36 +++++++++++++++++ .../rtbishop/look4sat/utility/Utilities.kt | 14 ------- .../com/rtbishop/look4sat/LocationTest.kt | 39 ------------------- .../com/rtbishop/look4sat/QthConverterTest.kt | 2 +- 7 files changed, 48 insertions(+), 65 deletions(-) create mode 100644 app/src/main/java/com/rtbishop/look4sat/utility/Extensions.kt delete mode 100644 app/src/test/java/com/rtbishop/look4sat/LocationTest.kt diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/PassesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/PassesFragment.kt index 91939e5a..d5e4c273 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/PassesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/PassesFragment.kt @@ -33,7 +33,7 @@ import com.rtbishop.look4sat.databinding.FragmentPassesBinding import com.rtbishop.look4sat.ui.adapters.PassesAdapter import com.rtbishop.look4sat.utility.PrefsManager import com.rtbishop.look4sat.utility.RecyclerDivider -import com.rtbishop.look4sat.utility.Utilities +import com.rtbishop.look4sat.utility.formatForTimer import dagger.hilt.android.AndroidEntryPoint import java.util.* import javax.inject.Inject @@ -77,7 +77,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes) { } else if (result is Result.InProgress) { passes.clear() binding?.apply { - passesTimer.text = Utilities.formatForTimer(0L) + passesTimer.text = 0L.formatForTimer() passesError.visibility = View.INVISIBLE passesRecycler.visibility = View.INVISIBLE passesProgress.visibility = View.VISIBLE @@ -111,14 +111,14 @@ class PassesFragment : Fragment(R.layout.fragment_passes) { try { val nextPass = passes.first { it.pass.startTime.time.minus(timeNow) > 0 } val millisBeforeStart = nextPass.pass.startTime.time.minus(timeNow) - binding?.passesTimer?.text = Utilities.formatForTimer(millisBeforeStart) + binding?.passesTimer?.text = millisBeforeStart.formatForTimer() } catch (e: NoSuchElementException) { val lastPass = passes.last() val millisBeforeEnd = lastPass.pass.endTime.time.minus(timeNow) - binding?.passesTimer?.text = Utilities.formatForTimer(millisBeforeEnd) + binding?.passesTimer?.text = millisBeforeEnd.formatForTimer() } } else { - binding?.passesTimer?.text = Utilities.formatForTimer(0L) + binding?.passesTimer?.text = 0L.formatForTimer() } } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/PolarFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/PolarFragment.kt index 7840974f..4964ce6d 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/PolarFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/PolarFragment.kt @@ -40,7 +40,7 @@ import com.rtbishop.look4sat.ui.adapters.TransAdapter import com.rtbishop.look4sat.ui.views.PolarView import com.rtbishop.look4sat.utility.PrefsManager import com.rtbishop.look4sat.utility.RecyclerDivider -import com.rtbishop.look4sat.utility.Utilities +import com.rtbishop.look4sat.utility.formatForTimer import dagger.hilt.android.AndroidEntryPoint import java.util.* import javax.inject.Inject @@ -157,17 +157,17 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener { if (!satPass.tle.isDeepspace) { if (dateNow.before(satPass.pass.startTime)) { val millisBeforeStart = satPass.pass.startTime.time.minus(timeNow) - binding.polarTimer.text = Utilities.formatForTimer(millisBeforeStart) + binding.polarTimer.text = millisBeforeStart.formatForTimer() } else { val millisBeforeEnd = satPass.pass.endTime.time.minus(timeNow) - binding.polarTimer.text = Utilities.formatForTimer(millisBeforeEnd) + binding.polarTimer.text = millisBeforeEnd.formatForTimer() if (dateNow.after(satPass.pass.endTime)) { - binding.polarTimer.text = Utilities.formatForTimer(0L) + binding.polarTimer.text = 0L.formatForTimer() findNavController().navigate(R.id.action_polar_to_passes) } } } else { - binding.polarTimer.text = Utilities.formatForTimer(0L) + binding.polarTimer.text = 0L.formatForTimer() } } } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/PrefsFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/PrefsFragment.kt index 5e2359d9..6b7d40b0 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/PrefsFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/PrefsFragment.kt @@ -31,7 +31,7 @@ import com.google.android.material.snackbar.Snackbar import com.rtbishop.look4sat.R import com.rtbishop.look4sat.utility.PrefsManager import com.rtbishop.look4sat.utility.Utilities -import com.rtbishop.look4sat.utility.Utilities.round +import com.rtbishop.look4sat.utility.round import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject 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..fa728247 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/utility/Extensions.kt @@ -0,0 +1,36 @@ +/******************************************************************************* +Look4Sat. Amateur radio satellite tracker and pass predictor. +Copyright (C) 2019, 2020 Arty Bishop (bishop.arty@gmail.com) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + ******************************************************************************/ + +package com.rtbishop.look4sat.utility + +import java.util.concurrent.TimeUnit + +fun Long.formatForTimer(): String { + val format = "%02d:%02d:%02d" + val hours = TimeUnit.MILLISECONDS.toHours(this) + val minutes = TimeUnit.MILLISECONDS.toMinutes(this) % 60 + val seconds = TimeUnit.MILLISECONDS.toSeconds(this) % 60 + return String.format(format, hours, minutes, seconds) +} + +fun Double.round(decimals: Int): Double { + var multiplier = 1.0 + repeat(decimals) { multiplier *= 10 } + return kotlin.math.round(this * multiplier) / multiplier +} diff --git a/app/src/main/java/com/rtbishop/look4sat/utility/Utilities.kt b/app/src/main/java/com/rtbishop/look4sat/utility/Utilities.kt index 9bdea4ad..e911e18a 100644 --- a/app/src/main/java/com/rtbishop/look4sat/utility/Utilities.kt +++ b/app/src/main/java/com/rtbishop/look4sat/utility/Utilities.kt @@ -25,20 +25,6 @@ import kotlin.math.round object Utilities { - fun formatForTimer(millis: Long): String { - val format = "%02d:%02d:%02d" - val hours = TimeUnit.MILLISECONDS.toHours(millis) - val minutes = TimeUnit.MILLISECONDS.toMinutes(millis) % 60 - val seconds = TimeUnit.MILLISECONDS.toSeconds(millis) % 60 - return String.format(format, hours, minutes, seconds) - } - - fun Double.round(decimals: Int): Double { - var multiplier = 1.0 - repeat(decimals) { multiplier *= 10 } - return round(this * multiplier) / multiplier - } - fun qthToGSP(qthString: String): GroundStationPosition { val latFirst = (qthString[1].toInt() - 65) * 10 val latSecond = qthString[3].toString().toInt() diff --git a/app/src/test/java/com/rtbishop/look4sat/LocationTest.kt b/app/src/test/java/com/rtbishop/look4sat/LocationTest.kt deleted file mode 100644 index 0b4858a8..00000000 --- a/app/src/test/java/com/rtbishop/look4sat/LocationTest.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.rtbishop.look4sat - -import com.rtbishop.look4sat.utility.Utilities -import com.rtbishop.look4sat.utility.Utilities.round -import org.junit.Test - -class LocationTest { - @Test - fun testLocToQth() { - assert(Utilities.locToQTH(51.4878, -0.2146) == "IO91vl") - assert(Utilities.locToQTH(48.1466, 11.6083) == "JN58td") - assert(Utilities.locToQTH(-34.91, -56.2116) == "GF15vc") - assert(Utilities.locToQTH(38.92, -77.065) == "FM18lw") - assert(Utilities.locToQTH(-41.2833, 174.745) == "RE78ir") - assert(Utilities.locToQTH(41.7147, -72.7272) == "FN31pr") - assert(Utilities.locToQTH(37.4137, -122.1073) == "CM87wj") - assert(Utilities.locToQTH(35.0542, -85.1142) == "EM75kb") - } - - @Test - fun testQthToLoc() { - var result = Utilities.qthToGSP("IO91vl") - assert(result.latitude.round(4) == 51.4792 && result.longitude.round(4) == -0.2083) - result = Utilities.qthToGSP("JN58td") - assert(result.latitude.round(4) == 48.1458 && result.longitude.round(4) == 11.625) - result = Utilities.qthToGSP("GF15vc") - assert(result.latitude.round(4) == -34.8958 && result.longitude.round(4) == -56.2083) - result = Utilities.qthToGSP("FM18lw") - assert(result.latitude.round(4) == 38.9375 && result.longitude.round(4) == -77.0417) - result = Utilities.qthToGSP("RE78ir") - assert(result.latitude.round(4) == -41.2708 && result.longitude.round(4) == 174.7083) - result = Utilities.qthToGSP("FN31pr") - assert(result.latitude.round(4) == 41.7292 && result.longitude.round(4) == -72.7083) - result = Utilities.qthToGSP("CM87wj") - assert(result.latitude.round(4) == 37.3958 && result.longitude.round(4) == -122.125) - result = Utilities.qthToGSP("EM75kb") - assert(result.latitude.round(4) == 35.0625 && result.longitude.round(4) == -85.125) - } -} \ No newline at end of file diff --git a/app/src/test/java/com/rtbishop/look4sat/QthConverterTest.kt b/app/src/test/java/com/rtbishop/look4sat/QthConverterTest.kt index cb3d97b1..ab80dd25 100644 --- a/app/src/test/java/com/rtbishop/look4sat/QthConverterTest.kt +++ b/app/src/test/java/com/rtbishop/look4sat/QthConverterTest.kt @@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., package com.rtbishop.look4sat import com.rtbishop.look4sat.utility.QthConverter -import com.rtbishop.look4sat.utility.Utilities.round +import com.rtbishop.look4sat.utility.round import org.junit.Test class QthConverterTest {