From 1806e0d14761bef76f1d1cb7294e1c19c427d76e Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sun, 2 May 2021 12:36:27 +0100 Subject: [PATCH] Added mockito dependency, fixed radar view update bug #51 --- app/build.gradle | 2 ++ .../rtbishop/look4sat/di/InteractorsModule.kt | 4 +-- .../framework/api/NetworkDataSource.kt | 2 +- .../entriesScreen/EntriesViewModel.kt | 6 ++-- .../presentation/mapScreen/MapViewModel.kt | 31 ++++++++----------- .../presentation/polarScreen/PolarView.kt | 1 + build.gradle | 1 + core/build.gradle | 1 + .../look4sat/data/DefaultSatelliteRepo.kt | 4 +-- .../look4sat/data/RemoteDataSource.kt | 2 +- .../rtbishop/look4sat/domain/SatelliteRepo.kt | 2 +- .../domain/predict4kotlin/StationPosition.kt | 2 +- ...ataFromFile.kt => ImportDataFromStream.kt} | 4 +-- 13 files changed, 31 insertions(+), 31 deletions(-) rename core/src/main/java/com/rtbishop/look4sat/interactors/{ImportDataFromFile.kt => ImportDataFromStream.kt} (60%) diff --git a/app/build.gradle b/app/build.gradle index d1e32d2e..b797b99e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -67,6 +67,8 @@ dependencies { implementation "com.jakewharton.timber:timber:$timber_version" testImplementation "junit:junit:$junit_version" + testImplementation "org.mockito:mockito-core:$mockito_version" testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_test_version" + androidTestImplementation "org.mockito:mockito-android:$mockito_version" debugImplementation "com.squareup.leakcanary:leakcanary-android:$leak_canary_version" } diff --git a/app/src/main/java/com/rtbishop/look4sat/di/InteractorsModule.kt b/app/src/main/java/com/rtbishop/look4sat/di/InteractorsModule.kt index 9c4a74b1..cce68a69 100644 --- a/app/src/main/java/com/rtbishop/look4sat/di/InteractorsModule.kt +++ b/app/src/main/java/com/rtbishop/look4sat/di/InteractorsModule.kt @@ -44,8 +44,8 @@ object InteractorsModule { } @Provides - fun provideImportDataFromFileUseCase(satelliteRepo: SatelliteRepo): ImportDataFromFile { - return ImportDataFromFile(satelliteRepo) + fun provideImportDataFromStreamUseCase(satelliteRepo: SatelliteRepo): ImportDataFromStream { + return ImportDataFromStream(satelliteRepo) } @Provides diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/api/NetworkDataSource.kt b/app/src/main/java/com/rtbishop/look4sat/framework/api/NetworkDataSource.kt index c71f5bd6..8b9a5f43 100644 --- a/app/src/main/java/com/rtbishop/look4sat/framework/api/NetworkDataSource.kt +++ b/app/src/main/java/com/rtbishop/look4sat/framework/api/NetworkDataSource.kt @@ -6,7 +6,7 @@ import java.io.InputStream class NetworkDataSource(private val api: SatelliteService) : RemoteDataSource { - override suspend fun fetchFileStream(url: String): InputStream? { + override suspend fun fetchDataStream(url: String): InputStream? { return api.fetchFileByUrl(url).body()?.byteStream() } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt index 37923f3e..dcc8d1d5 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt @@ -29,7 +29,7 @@ import com.rtbishop.look4sat.domain.model.SatItem import com.rtbishop.look4sat.framework.model.Result import com.rtbishop.look4sat.framework.model.TleSource import com.rtbishop.look4sat.interactors.GetSatItems -import com.rtbishop.look4sat.interactors.ImportDataFromFile +import com.rtbishop.look4sat.interactors.ImportDataFromStream import com.rtbishop.look4sat.interactors.ImportDataFromWeb import com.rtbishop.look4sat.interactors.UpdateEntriesSelection import com.rtbishop.look4sat.utility.PrefsManager @@ -46,7 +46,7 @@ class EntriesViewModel @Inject constructor( private val prefsManager: PrefsManager, private val resolver: ContentResolver, private val getSatItems: GetSatItems, - private val importDataFromFile: ImportDataFromFile, + private val importDataFromStream: ImportDataFromStream, private val importDataFromWeb: ImportDataFromWeb, private val updateEntriesSelection: UpdateEntriesSelection, ) : ViewModel(), EntriesAdapter.EntriesClickListener, SearchView.OnQueryTextListener { @@ -70,7 +70,7 @@ class EntriesViewModel @Inject constructor( _satData.value = Result.InProgress runCatching { resolver.openInputStream(uri)?.use { stream -> - importDataFromFile(stream) + importDataFromStream(stream) } }.onFailure { _satData.value = Result.Error(it) } } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt index 5ce41ff3..63d28357 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt @@ -50,7 +50,9 @@ class MapViewModel @Inject constructor( private lateinit var selectedSat: Satellite val stationPos = liveData { - emit(Position(gsp.latitude.toOsmLat(), gsp.longitude.toOsmLon())) + val osmLat = getOsmLat(gsp.latitude) + val osmLon = getOsmLon(gsp.longitude) + emit(Position(osmLat, osmLon)) } private val _satTrack = MutableLiveData>>() @@ -120,8 +122,8 @@ class MapViewModel @Inject constructor( val satPositions = mutableMapOf() list.forEach { satellite -> val satPos = satellite.getPredictor(gsp).getSatPos(date) - val osmLat = Math.toDegrees(satPos.latitude).toOsmLat() - val osmLon = Math.toDegrees(satPos.longitude).toOsmLon() + val osmLat = getOsmLat(Math.toDegrees(satPos.latitude)) + val osmLon = getOsmLon(Math.toDegrees(satPos.longitude)) satPositions[satellite] = Position(osmLat, osmLon) } _allSatPositions.postValue(satPositions) @@ -133,9 +135,9 @@ class MapViewModel @Inject constructor( val satTracks = mutableListOf>() val currentTrack = mutableListOf() var oldLongitude = 0.0 - sat.getPredictor(gsp).getPositions(date, 15, 0, 2.4).forEach { pos -> - val osmLat = Math.toDegrees(pos.latitude).toOsmLat() - val osmLon = Math.toDegrees(pos.longitude).toOsmLon() + sat.getPredictor(gsp).getPositions(date, 15, 0, 2.4).forEach { satPos -> + val osmLat = getOsmLat(Math.toDegrees(satPos.latitude)) + val osmLon = getOsmLon(Math.toDegrees(satPos.longitude)) val currentPosition = Position(osmLat, osmLon) if (oldLongitude < -170.0 && currentPosition.longitude > 170.0) { // adding left terminal position @@ -161,7 +163,9 @@ class MapViewModel @Inject constructor( private suspend fun setSelectedSatFootprint(sat: Satellite, gsp: StationPosition, date: Date) { withContext(defaultDispatcher) { val satFootprint = sat.getPosition(gsp, date).getRangeCircle().map { rangePos -> - Position(rangePos.latitude.toOsmLat(), rangePos.longitude.toOsmLon()) + val osmLat = getOsmLat(rangePos.latitude) + val osmLon = getOsmLon(rangePos.longitude) + Position(osmLat, osmLon) } _satFootprint.postValue(satFootprint) } @@ -170,8 +174,8 @@ class MapViewModel @Inject constructor( private suspend fun setSelectedSatData(sat: Satellite, gsp: StationPosition, date: Date) { withContext(defaultDispatcher) { val satPos = sat.getPredictor(gsp).getSatPos(date) - val osmLat = Math.toDegrees(satPos.latitude).toOsmLat() - val osmLon = Math.toDegrees(satPos.longitude).toOsmLon() + val osmLat = getOsmLat(Math.toDegrees(satPos.latitude)) + val osmLon = getOsmLon(Math.toDegrees(satPos.longitude)) val osmPos = Position(osmLat, osmLon) val qthLoc = qthConverter.positionToQTH(osmPos.latitude, osmPos.longitude) ?: "-- --" val velocity = getOrbitalVelocity(satPos.altitude) @@ -183,19 +187,10 @@ class MapViewModel @Inject constructor( } } - private fun Double.toOsmLat(): Double { - return min(max(this, -85.0), 85.0) - } - private fun getOsmLat(latitude: Double): Double { return min(max(latitude, -85.0), 85.0) } - private fun Double.toOsmLon(): Double { - val newLon = if (this < -180.0) this + 360.0 else if (this > 180.0) this - 360.0 else this - return min(max(newLon, -180.0), 180.0) - } - private fun getOsmLon(longitude: Double): Double { val newLongitude = when { longitude < -180.0 -> longitude + 360.0 diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarView.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarView.kt index ac4d391f..dfdf3c47 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarView.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarView.kt @@ -92,6 +92,7 @@ class PolarView(context: Context) : View(context) { } override fun onDraw(canvas: Canvas) { + canvas.drawColor(ContextCompat.getColor(context, R.color.greyDark)) canvas.translate(polarCenter, polarCenter) drawRadarView(canvas) drawRadarText(canvas) diff --git a/build.gradle b/build.gradle index 6725db09..cccb5c7c 100644 --- a/build.gradle +++ b/build.gradle @@ -14,6 +14,7 @@ buildscript { osmdroid_version = '6.1.10' timber_version = '4.7.1' junit_version = '4.13.2' + mockito_version = '3.9.0' coroutines_test_version = '1.3.2' leak_canary_version = '2.5' } diff --git a/core/build.gradle b/core/build.gradle index a709f96d..4f3eb590 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -13,5 +13,6 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" testImplementation "junit:junit:$junit_version" + testImplementation "org.mockito:mockito-core:$mockito_version" testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_test_version" } diff --git a/core/src/main/java/com/rtbishop/look4sat/data/DefaultSatelliteRepo.kt b/core/src/main/java/com/rtbishop/look4sat/data/DefaultSatelliteRepo.kt index 75f9ac31..3c2de37d 100644 --- a/core/src/main/java/com/rtbishop/look4sat/data/DefaultSatelliteRepo.kt +++ b/core/src/main/java/com/rtbishop/look4sat/data/DefaultSatelliteRepo.kt @@ -31,7 +31,7 @@ class DefaultSatelliteRepo( return localSource.getSelectedSatellites() } - override suspend fun importDataFromFile(stream: InputStream) = withContext(ioDispatcher) { + override suspend fun importDataFromStream(stream: InputStream) = withContext(ioDispatcher) { val importedEntries = Satellite.importElements(stream).map { tle -> SatEntry(tle) } localSource.updateEntries(importedEntries) } @@ -42,7 +42,7 @@ class DefaultSatelliteRepo( val importedEntries = mutableListOf() val streams = mutableListOf() sources.forEach { source -> - remoteSource.fetchFileStream(source)?.let { stream -> + remoteSource.fetchDataStream(source)?.let { stream -> if (source.contains(".zip", true)) { val zipStream = ZipInputStream(stream).apply { nextEntry } streams.add(zipStream) diff --git a/core/src/main/java/com/rtbishop/look4sat/data/RemoteDataSource.kt b/core/src/main/java/com/rtbishop/look4sat/data/RemoteDataSource.kt index cf922df7..cfbcdbf6 100644 --- a/core/src/main/java/com/rtbishop/look4sat/data/RemoteDataSource.kt +++ b/core/src/main/java/com/rtbishop/look4sat/data/RemoteDataSource.kt @@ -5,7 +5,7 @@ import java.io.InputStream interface RemoteDataSource { - suspend fun fetchFileStream(url: String): InputStream? + suspend fun fetchDataStream(url: String): InputStream? suspend fun fetchTransmitters(): List } diff --git a/core/src/main/java/com/rtbishop/look4sat/domain/SatelliteRepo.kt b/core/src/main/java/com/rtbishop/look4sat/domain/SatelliteRepo.kt index 44cf4945..dff9cb63 100644 --- a/core/src/main/java/com/rtbishop/look4sat/domain/SatelliteRepo.kt +++ b/core/src/main/java/com/rtbishop/look4sat/domain/SatelliteRepo.kt @@ -14,7 +14,7 @@ interface SatelliteRepo { suspend fun getSelectedSatellites(): List - suspend fun importDataFromFile(stream: InputStream) + suspend fun importDataFromStream(stream: InputStream) suspend fun importDataFromWeb(sources: List) diff --git a/core/src/main/java/com/rtbishop/look4sat/domain/predict4kotlin/StationPosition.kt b/core/src/main/java/com/rtbishop/look4sat/domain/predict4kotlin/StationPosition.kt index 542c1b2a..98bc20c4 100644 --- a/core/src/main/java/com/rtbishop/look4sat/domain/predict4kotlin/StationPosition.kt +++ b/core/src/main/java/com/rtbishop/look4sat/domain/predict4kotlin/StationPosition.kt @@ -21,5 +21,5 @@ data class StationPosition( val latitude: Double, val longitude: Double, val altitude: Double, - val name: String = "base" + val name: String = "default" ) diff --git a/core/src/main/java/com/rtbishop/look4sat/interactors/ImportDataFromFile.kt b/core/src/main/java/com/rtbishop/look4sat/interactors/ImportDataFromStream.kt similarity index 60% rename from core/src/main/java/com/rtbishop/look4sat/interactors/ImportDataFromFile.kt rename to core/src/main/java/com/rtbishop/look4sat/interactors/ImportDataFromStream.kt index 62ed17c7..68f51fea 100644 --- a/core/src/main/java/com/rtbishop/look4sat/interactors/ImportDataFromFile.kt +++ b/core/src/main/java/com/rtbishop/look4sat/interactors/ImportDataFromStream.kt @@ -3,9 +3,9 @@ package com.rtbishop.look4sat.interactors import com.rtbishop.look4sat.domain.SatelliteRepo import java.io.InputStream -class ImportDataFromFile(private val satelliteRepo: SatelliteRepo) { +class ImportDataFromStream(private val satelliteRepo: SatelliteRepo) { suspend operator fun invoke(stream: InputStream) { - satelliteRepo.importDataFromFile(stream) + satelliteRepo.importDataFromStream(stream) } }