From 53fcf4790afe1df459ab0a0b8ae2ea7d7871094b Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Thu, 22 Apr 2021 14:58:42 +0100 Subject: [PATCH] Added framework DataSources, DataMapper and Models --- app/src/main/AndroidManifest.xml | 4 +- .../framework/api/RetrofitDataSource.kt | 21 +++++ .../framework/api/SatelliteService.kt | 35 ++++++++ .../look4sat/framework/db/RoomConverters.kt | 51 ++++++++++++ .../look4sat/framework/db/RoomDataSource.kt | 41 ++++++++++ .../look4sat/framework/db/SatelliteDao.kt | 81 +++++++++++++++++++ .../look4sat/framework/db/SatelliteDb.kt | 31 +++++++ .../look4sat/framework/model/Result.kt | 24 ++++++ .../look4sat/framework/model/SatEntry.kt | 30 +++++++ .../look4sat/framework/model/SatItem.kt | 33 ++++++++ .../look4sat/framework}/model/SatPass.kt | 4 +- .../look4sat/framework/model/SatTrans.kt | 34 ++++++++ .../look4sat/framework/model/SelectedSat.kt | 35 ++++++++ .../look4sat/framework/model/TleSource.kt | 20 +++++ .../{ui => presentation}/Look4SatActivity.kt | 2 +- .../Look4SatApplication.kt | 2 +- .../entriesScreen/EntriesAdapter.kt | 2 +- .../entriesScreen/EntriesFragment.kt | 2 +- .../entriesScreen/EntriesViewModel.kt | 2 +- .../infoScreen/InfoFragment.kt | 2 +- .../mapScreen/MapFragment.kt | 2 +- .../mapScreen/MapViewModel.kt | 2 +- .../passesScreen/PassesAdapter.kt | 2 +- .../passesScreen/PassesFragment.kt | 2 +- .../passesScreen/PassesViewModel.kt | 4 +- .../polarScreen/PolarFragment.kt | 2 +- .../polarScreen/PolarView.kt | 2 +- .../polarScreen/PolarViewModel.kt | 5 +- .../polarScreen/TransAdapter.kt | 2 +- .../prefsScreen/PrefsFragment.kt | 2 +- .../sourcesDialog/SourcesAdapter.kt | 2 +- .../sourcesDialog/SourcesDialog.kt | 2 +- .../splashDialog/SplashDialog.kt | 2 +- .../rtbishop/look4sat/utility/DataMapper.kt | 69 ++++++++++++++++ .../OrientationProvider.kt | 2 +- .../repository => utility}/PassesRepo.kt | 4 +- app/src/main/res/layout/fragment_info.xml | 2 +- app/src/main/res/navigation/nav_graph.xml | 16 ++-- .../look4sat/data/DefaultSatelliteRepo.kt | 19 ++--- .../rtbishop/look4sat/data/LocalDataSource.kt | 6 +- .../look4sat/data/RemoteDataSource.kt | 6 +- .../rtbishop/look4sat/domain/SatelliteRepo.kt | 4 +- .../look4sat/domain/model/SatEntry.kt | 4 +- .../model/{Transmitter.kt => SatTrans.kt} | 2 +- .../interactors/GetTransmittersForSat.kt | 4 +- .../look4sat/predict4kotlin/Satellite.kt | 9 ++- 46 files changed, 571 insertions(+), 63 deletions(-) create mode 100644 app/src/main/java/com/rtbishop/look4sat/framework/api/RetrofitDataSource.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/framework/api/SatelliteService.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/framework/db/RoomConverters.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/framework/db/RoomDataSource.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/framework/db/SatelliteDao.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/framework/db/SatelliteDb.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/framework/model/Result.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/framework/model/SatEntry.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/framework/model/SatItem.kt rename {core/src/main/java/com/rtbishop/look4sat/domain => app/src/main/java/com/rtbishop/look4sat/framework}/model/SatPass.kt (93%) create mode 100644 app/src/main/java/com/rtbishop/look4sat/framework/model/SatTrans.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/framework/model/SelectedSat.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/framework/model/TleSource.kt rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/Look4SatActivity.kt (97%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/Look4SatApplication.kt (96%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/entriesScreen/EntriesAdapter.kt (98%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/entriesScreen/EntriesFragment.kt (98%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/entriesScreen/EntriesViewModel.kt (99%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/infoScreen/InfoFragment.kt (97%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/mapScreen/MapFragment.kt (99%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/mapScreen/MapViewModel.kt (99%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/passesScreen/PassesAdapter.kt (99%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/passesScreen/PassesFragment.kt (98%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/passesScreen/PassesViewModel.kt (96%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/polarScreen/PolarFragment.kt (98%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/polarScreen/PolarView.kt (98%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/polarScreen/PolarViewModel.kt (96%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/polarScreen/TransAdapter.kt (98%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/prefsScreen/PrefsFragment.kt (98%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/sourcesDialog/SourcesAdapter.kt (97%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/sourcesDialog/SourcesDialog.kt (97%) rename app/src/main/java/com/rtbishop/look4sat/{ui => presentation}/splashDialog/SplashDialog.kt (96%) create mode 100644 app/src/main/java/com/rtbishop/look4sat/utility/DataMapper.kt rename app/src/main/java/com/rtbishop/look4sat/{ui/polarScreen => utility}/OrientationProvider.kt (98%) rename app/src/main/java/com/rtbishop/look4sat/{data/repository => utility}/PassesRepo.kt (95%) rename core/src/main/java/com/rtbishop/look4sat/domain/model/{Transmitter.kt => SatTrans.kt} (90%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1c390a0a..063b8042 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,12 +6,12 @@ diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/api/RetrofitDataSource.kt b/app/src/main/java/com/rtbishop/look4sat/framework/api/RetrofitDataSource.kt new file mode 100644 index 00000000..3852fbce --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/api/RetrofitDataSource.kt @@ -0,0 +1,21 @@ +package com.rtbishop.look4sat.framework.api + +import com.rtbishop.look4sat.data.RemoteDataSource +import com.rtbishop.look4sat.domain.model.SatTrans +import java.io.InputStream + +class RetrofitDataSource(private val satelliteService: SatelliteService) : RemoteDataSource { + + override suspend fun fetchFileStream(url: String): InputStream? { + return satelliteService.fetchFileByUrl(url).body()?.byteStream() + } + + override suspend fun fetchTransmitters(): List { + return satelliteService.fetchTransmitters().map { trans -> + SatTrans( + trans.uuid, trans.info, trans.isAlive, trans.downlink, + trans.uplink, trans.mode, trans.isInverted, trans.catNum + ) + } + } +} diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/api/SatelliteService.kt b/app/src/main/java/com/rtbishop/look4sat/framework/api/SatelliteService.kt new file mode 100644 index 00000000..7f0fd2da --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/api/SatelliteService.kt @@ -0,0 +1,35 @@ +/* + * Look4Sat. Amateur radio satellite tracker and pass predictor. + * Copyright (C) 2019-2021 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 3 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, see . + */ +package com.rtbishop.look4sat.framework.api + +import com.rtbishop.look4sat.framework.model.SatTrans +import okhttp3.ResponseBody +import retrofit2.Response +import retrofit2.http.GET +import retrofit2.http.Streaming +import retrofit2.http.Url + +interface SatelliteService { + + @Streaming + @GET + suspend fun fetchFileByUrl(@Url url: String): Response + + @GET("transmitters/") + suspend fun fetchTransmitters(): List +} diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/db/RoomConverters.kt b/app/src/main/java/com/rtbishop/look4sat/framework/db/RoomConverters.kt new file mode 100644 index 00000000..29948ae3 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/db/RoomConverters.kt @@ -0,0 +1,51 @@ +/* + * Look4Sat. Amateur radio satellite tracker and pass predictor. + * Copyright (C) 2019-2021 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 3 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, see . + */ +package com.rtbishop.look4sat.framework.db + +import androidx.room.TypeConverter +import com.rtbishop.look4sat.predict4kotlin.Satellite +import com.rtbishop.look4sat.predict4kotlin.TLE +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.Moshi + +object RoomConverters { + + private lateinit var tleAdapter: JsonAdapter + + fun initialize(moshi: Moshi) { + tleAdapter = moshi.adapter(TLE::class.java) + } + + @JvmStatic + @TypeConverter + fun tleToString(tle: TLE): String { + return tleAdapter.toJson(tle) + } + + @JvmStatic + @TypeConverter + fun tleFromString(string: String): TLE? { + return tleAdapter.fromJson(string) + } + + @JvmStatic + @TypeConverter + fun satFromString(string: String): Satellite? { + return Satellite.createSat(tleAdapter.fromJson(string)) + } +} diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/db/RoomDataSource.kt b/app/src/main/java/com/rtbishop/look4sat/framework/db/RoomDataSource.kt new file mode 100644 index 00000000..1036c718 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/db/RoomDataSource.kt @@ -0,0 +1,41 @@ +package com.rtbishop.look4sat.framework.db + +import com.rtbishop.look4sat.data.LocalDataSource +import com.rtbishop.look4sat.domain.model.SatEntry +import com.rtbishop.look4sat.domain.model.SatItem +import com.rtbishop.look4sat.domain.model.SatTrans +import com.rtbishop.look4sat.predict4kotlin.Satellite +import com.rtbishop.look4sat.utility.DataMapper +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +class RoomDataSource(private val satelliteDao: SatelliteDao) : LocalDataSource { + + override fun getSatItems(): Flow> { + return satelliteDao.getSatItems() + .map { satItems -> DataMapper.satItemsToDomainItems(satItems) } + } + + override suspend fun getSelectedSatellites(): List { + return satelliteDao.getSelectedSatellites() + } + + override suspend fun updateEntries(entries: List) { + val satEntries = entries.map { entry -> DataMapper.domainEntryToSatEntry(entry) } + satelliteDao.updateEntries(satEntries) + } + + override suspend fun updateEntriesSelection(catNums: List, isSelected: Boolean) { + satelliteDao.updateEntriesSelection(catNums, isSelected) + } + + override fun getTransmittersForSat(catNum: Int): Flow> { + return satelliteDao.getSatTransmitters(catNum) + .map { satTransList -> DataMapper.satTransListToDomainTransList(satTransList) } + } + + override suspend fun updateTransmitters(satelliteTrans: List) { + val satTransList = DataMapper.domainTransListToSatTransList(satelliteTrans) + satelliteDao.updateTransmitters(satTransList) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/db/SatelliteDao.kt b/app/src/main/java/com/rtbishop/look4sat/framework/db/SatelliteDao.kt new file mode 100644 index 00000000..0e84875e --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/db/SatelliteDao.kt @@ -0,0 +1,81 @@ +/* + * Look4Sat. Amateur radio satellite tracker and pass predictor. + * Copyright (C) 2019-2021 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 3 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, see . + */ +package com.rtbishop.look4sat.framework.db + +import androidx.room.* +import com.rtbishop.look4sat.framework.model.SatEntry +import com.rtbishop.look4sat.framework.model.SatItem +import com.rtbishop.look4sat.framework.model.SatTrans +import com.rtbishop.look4sat.predict4kotlin.Satellite +import kotlinx.coroutines.flow.Flow + +@Dao +interface SatelliteDao { + + @Transaction + @Query("SELECT catNum, name, isSelected FROM entries ORDER BY name ASC") + fun getSatItems(): Flow> + + @Query("SELECT * FROM transmitters WHERE catNum = :catNum") + fun getSatTransmitters(catNum: Int): Flow> + + @Query("SELECT tle FROM entries WHERE isSelected = 1") + suspend fun getSelectedSatellites(): List + + @Query("SELECT catNum FROM entries WHERE isSelected = 1") + suspend fun getSelectedCatNums(): List + + @Transaction + suspend fun updateEntries(entries: List) { + val selectedCatNums = getSelectedCatNums() + insertEntries(entries) + restoreEntriesSelection(selectedCatNums, true) + } + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insertEntries(entries: List) + + @Transaction + suspend fun restoreEntriesSelection(catNums: List, isSelected: Boolean) { + clearEntriesSelection() + catNums.forEach { catNum -> updateEntrySelection(catNum, isSelected) } + } + + @Query("UPDATE entries SET isSelected = 0") + suspend fun clearEntriesSelection() + + @Query("UPDATE entries SET isSelected = :isSelected WHERE catNum = :catNum") + suspend fun updateEntrySelection(catNum: Int, isSelected: Boolean) + + @Transaction + suspend fun updateEntriesSelection(catNums: List, isSelected: Boolean) { + catNums.forEach { catNum -> updateEntrySelection(catNum, isSelected) } + } + + @Transaction + suspend fun updateTransmitters(transmitters: List) { + deleteTransmitters() + insertTransmitters(transmitters) + } + + @Query("DELETE from transmitters") + suspend fun deleteTransmitters() + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insertTransmitters(transmitters: List) +} diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/db/SatelliteDb.kt b/app/src/main/java/com/rtbishop/look4sat/framework/db/SatelliteDb.kt new file mode 100644 index 00000000..617ac994 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/db/SatelliteDb.kt @@ -0,0 +1,31 @@ +/* + * Look4Sat. Amateur radio satellite tracker and pass predictor. + * Copyright (C) 2019-2021 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 3 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, see . + */ +package com.rtbishop.look4sat.framework.db + +import androidx.room.Database +import androidx.room.RoomDatabase +import androidx.room.TypeConverters +import com.rtbishop.look4sat.framework.model.SatEntry +import com.rtbishop.look4sat.framework.model.SatTrans + +@Database(entities = [SatEntry::class, SatTrans::class], version = 1) +@TypeConverters(RoomConverters::class) +abstract class SatelliteDb : RoomDatabase() { + + abstract fun satelliteDao(): SatelliteDao +} diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/model/Result.kt b/app/src/main/java/com/rtbishop/look4sat/framework/model/Result.kt new file mode 100644 index 00000000..52b6cf5b --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/model/Result.kt @@ -0,0 +1,24 @@ +/* + * Look4Sat. Amateur radio satellite tracker and pass predictor. + * Copyright (C) 2019-2021 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 3 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, see . + */ +package com.rtbishop.look4sat.framework.model + +sealed class Result { + data class Success(val data: T) : Result() + data class Error(val exception: Throwable) : Result() + object InProgress : Result() +} diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/model/SatEntry.kt b/app/src/main/java/com/rtbishop/look4sat/framework/model/SatEntry.kt new file mode 100644 index 00000000..4d7aec2a --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/model/SatEntry.kt @@ -0,0 +1,30 @@ +/* + * Look4Sat. Amateur radio satellite tracker and pass predictor. + * Copyright (C) 2019-2021 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 3 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, see . + */ +package com.rtbishop.look4sat.framework.model + +import androidx.room.Entity +import androidx.room.PrimaryKey +import com.rtbishop.look4sat.predict4kotlin.TLE + +@Entity(tableName = "entries") +data class SatEntry( + val tle: TLE, + @PrimaryKey val catNum: Int = tle.catnum, + val name: String = tle.name, + var isSelected: Boolean = false +) diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/model/SatItem.kt b/app/src/main/java/com/rtbishop/look4sat/framework/model/SatItem.kt new file mode 100644 index 00000000..e03580eb --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/model/SatItem.kt @@ -0,0 +1,33 @@ +/* + * Look4Sat. Amateur radio satellite tracker and pass predictor. + * Copyright (C) 2019-2021 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 3 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, see . + */ +package com.rtbishop.look4sat.framework.model + +import androidx.room.Relation + +data class SatItem( + val catNum: Int, + val name: String, + var isSelected: Boolean, + @Relation( + parentColumn = "catNum", + entity = SatTrans::class, + entityColumn = "catNum", + projection = ["mode"] + ) + val modes: List +) diff --git a/core/src/main/java/com/rtbishop/look4sat/domain/model/SatPass.kt b/app/src/main/java/com/rtbishop/look4sat/framework/model/SatPass.kt similarity index 93% rename from core/src/main/java/com/rtbishop/look4sat/domain/model/SatPass.kt rename to app/src/main/java/com/rtbishop/look4sat/framework/model/SatPass.kt index df6f47db..6d99ce58 100644 --- a/core/src/main/java/com/rtbishop/look4sat/domain/model/SatPass.kt +++ b/app/src/main/java/com/rtbishop/look4sat/framework/model/SatPass.kt @@ -15,9 +15,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.domain.model +package com.rtbishop.look4sat.framework.model -import com.rtbishop.look4sat.predict4kotlin.PassPredictor +import com.rtbishop.look4sat.utility.PassPredictor import java.util.* data class SatPass( diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/model/SatTrans.kt b/app/src/main/java/com/rtbishop/look4sat/framework/model/SatTrans.kt new file mode 100644 index 00000000..d79eb513 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/model/SatTrans.kt @@ -0,0 +1,34 @@ +/* + * Look4Sat. Amateur radio satellite tracker and pass predictor. + * Copyright (C) 2019-2021 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 3 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, see . + */ +package com.rtbishop.look4sat.framework.model + +import androidx.room.Entity +import androidx.room.PrimaryKey +import com.squareup.moshi.Json + +@Entity(tableName = "transmitters") +data class SatTrans( + @PrimaryKey @field:Json(name = "uuid") val uuid: String, + @field:Json(name = "description") val info: String, + @field:Json(name = "alive") val isAlive: Boolean, + @field:Json(name = "downlink_low") var downlink: Long?, + @field:Json(name = "uplink_low") var uplink: Long?, + @field:Json(name = "mode") val mode: String?, + @field:Json(name = "invert") val isInverted: Boolean, + @field:Json(name = "norad_cat_id") val catNum: Int +) diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/model/SelectedSat.kt b/app/src/main/java/com/rtbishop/look4sat/framework/model/SelectedSat.kt new file mode 100644 index 00000000..5b47ff91 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/model/SelectedSat.kt @@ -0,0 +1,35 @@ +/* + * Look4Sat. Amateur radio satellite tracker and pass predictor. + * Copyright (C) 2019-2021 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 3 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, see . + */ +package com.rtbishop.look4sat.framework.model + +import com.github.amsacode.predict4java.Position +import com.github.amsacode.predict4java.Satellite +import org.osmdroid.views.overlay.Overlay + +data class SelectedSat( + val pass: Satellite, + val catNum: Int, + val name: String, + val range: Double, + val altitude: Double, + val velocity: Double, + val qthLoc: String, + val osmPos: Position, + val footprint: Overlay, + val groundTrack: Overlay +) diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/model/TleSource.kt b/app/src/main/java/com/rtbishop/look4sat/framework/model/TleSource.kt new file mode 100644 index 00000000..5e4ee23c --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/framework/model/TleSource.kt @@ -0,0 +1,20 @@ +/* + * Look4Sat. Amateur radio satellite tracker and pass predictor. + * Copyright (C) 2019-2021 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 3 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, see . + */ +package com.rtbishop.look4sat.framework.model + +class TleSource(var url: String = String()) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/Look4SatActivity.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/Look4SatActivity.kt similarity index 97% rename from app/src/main/java/com/rtbishop/look4sat/ui/Look4SatActivity.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/Look4SatActivity.kt index 80f84f2b..f6b32020 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/Look4SatActivity.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/Look4SatActivity.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui +package com.rtbishop.look4sat.presentation import android.content.pm.ActivityInfo import android.os.Bundle diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/Look4SatApplication.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/Look4SatApplication.kt similarity index 96% rename from app/src/main/java/com/rtbishop/look4sat/ui/Look4SatApplication.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/Look4SatApplication.kt index b15536c2..cc6ded8c 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/Look4SatApplication.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/Look4SatApplication.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui +package com.rtbishop.look4sat.presentation import android.app.Application import com.rtbishop.look4sat.BuildConfig diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/entriesScreen/EntriesAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesAdapter.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/ui/entriesScreen/EntriesAdapter.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesAdapter.kt index 8e752802..080bc891 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/entriesScreen/EntriesAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesAdapter.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.entriesScreen +package com.rtbishop.look4sat.presentation.entriesScreen import android.view.LayoutInflater import android.view.ViewGroup diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/entriesScreen/EntriesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragment.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/ui/entriesScreen/EntriesFragment.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragment.kt index 0afa24ae..8e25b1a9 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/entriesScreen/EntriesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragment.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.entriesScreen +package com.rtbishop.look4sat.presentation.entriesScreen import android.os.Bundle import android.view.View diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/entriesScreen/EntriesViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt similarity index 99% rename from app/src/main/java/com/rtbishop/look4sat/ui/entriesScreen/EntriesViewModel.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt index 6ad30638..9ce948da 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/entriesScreen/EntriesViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.entriesScreen +package com.rtbishop.look4sat.presentation.entriesScreen import android.content.Context import android.net.Uri diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/infoScreen/InfoFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/infoScreen/InfoFragment.kt similarity index 97% rename from app/src/main/java/com/rtbishop/look4sat/ui/infoScreen/InfoFragment.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/infoScreen/InfoFragment.kt index ea8b774b..be3cd9a1 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/infoScreen/InfoFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/infoScreen/InfoFragment.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.infoScreen +package com.rtbishop.look4sat.presentation.infoScreen import android.content.Intent import android.net.Uri diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/mapScreen/MapFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapFragment.kt similarity index 99% rename from app/src/main/java/com/rtbishop/look4sat/ui/mapScreen/MapFragment.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapFragment.kt index 8d74082c..3d57611b 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/mapScreen/MapFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapFragment.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.mapScreen +package com.rtbishop.look4sat.presentation.mapScreen import android.graphics.Color import android.graphics.ColorMatrix diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/mapScreen/MapViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt similarity index 99% rename from app/src/main/java/com/rtbishop/look4sat/ui/mapScreen/MapViewModel.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt index ff585913..3d6f160f 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/mapScreen/MapViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.mapScreen +package com.rtbishop.look4sat.presentation.mapScreen import android.graphics.Color import android.graphics.Paint diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/passesScreen/PassesAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesAdapter.kt similarity index 99% rename from app/src/main/java/com/rtbishop/look4sat/ui/passesScreen/PassesAdapter.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesAdapter.kt index 221bb84c..3609396e 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/passesScreen/PassesAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesAdapter.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.passesScreen +package com.rtbishop.look4sat.presentation.passesScreen import android.view.LayoutInflater import android.view.ViewGroup diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/passesScreen/PassesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesFragment.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/ui/passesScreen/PassesFragment.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesFragment.kt index ffebbe52..1685d5a0 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/passesScreen/PassesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesFragment.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.passesScreen +package com.rtbishop.look4sat.presentation.passesScreen import android.os.Bundle import android.view.View diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/passesScreen/PassesViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt similarity index 96% rename from app/src/main/java/com/rtbishop/look4sat/ui/passesScreen/PassesViewModel.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt index 7d15824e..3302e640 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/passesScreen/PassesViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.passesScreen +package com.rtbishop.look4sat.presentation.passesScreen import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData @@ -23,7 +23,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.rtbishop.look4sat.data.model.Result import com.rtbishop.look4sat.data.model.SatPass -import com.rtbishop.look4sat.data.repository.PassesRepo +import com.rtbishop.look4sat.utility.PassesRepo import com.rtbishop.look4sat.data.repository.SatelliteRepo import com.rtbishop.look4sat.utility.PrefsManager import dagger.hilt.android.lifecycle.HiltViewModel diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/PolarFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarFragment.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/PolarFragment.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarFragment.kt index 08703a86..22ea35f1 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/PolarFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarFragment.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.polarScreen +package com.rtbishop.look4sat.presentation.polarScreen import android.os.Bundle import android.view.View diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/PolarView.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarView.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/PolarView.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarView.kt index f6b18e80..0c9050ee 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/PolarView.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarView.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.polarScreen +package com.rtbishop.look4sat.presentation.polarScreen import android.content.Context import android.graphics.Canvas diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/PolarViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarViewModel.kt similarity index 96% rename from app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/PolarViewModel.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarViewModel.kt index 75d7e05f..0edf1bcb 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/PolarViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarViewModel.kt @@ -15,14 +15,15 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.polarScreen +package com.rtbishop.look4sat.presentation.polarScreen import androidx.lifecycle.* import com.rtbishop.look4sat.data.model.SatPass import com.rtbishop.look4sat.data.model.SatTrans -import com.rtbishop.look4sat.data.repository.PassesRepo +import com.rtbishop.look4sat.utility.PassesRepo import com.rtbishop.look4sat.data.repository.SatelliteRepo import com.rtbishop.look4sat.di.IoDispatcher +import com.rtbishop.look4sat.utility.OrientationProvider import com.rtbishop.look4sat.utility.PrefsManager import com.rtbishop.look4sat.utility.round import dagger.hilt.android.lifecycle.HiltViewModel diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/TransAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/TransAdapter.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/TransAdapter.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/TransAdapter.kt index 5261de81..b9185b3b 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/TransAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/TransAdapter.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.polarScreen +package com.rtbishop.look4sat.presentation.polarScreen import android.view.LayoutInflater import android.view.ViewGroup diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/prefsScreen/PrefsFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/prefsScreen/PrefsFragment.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/ui/prefsScreen/PrefsFragment.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/prefsScreen/PrefsFragment.kt index 8ef263c6..166f42bc 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/prefsScreen/PrefsFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/prefsScreen/PrefsFragment.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.prefsScreen +package com.rtbishop.look4sat.presentation.prefsScreen import android.Manifest import android.content.pm.PackageManager diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/sourcesDialog/SourcesAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/sourcesDialog/SourcesAdapter.kt similarity index 97% rename from app/src/main/java/com/rtbishop/look4sat/ui/sourcesDialog/SourcesAdapter.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/sourcesDialog/SourcesAdapter.kt index 84895e68..d6a5d785 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/sourcesDialog/SourcesAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/sourcesDialog/SourcesAdapter.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.sourcesDialog +package com.rtbishop.look4sat.presentation.sourcesDialog import android.view.LayoutInflater import android.view.ViewGroup diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/sourcesDialog/SourcesDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/sourcesDialog/SourcesDialog.kt similarity index 97% rename from app/src/main/java/com/rtbishop/look4sat/ui/sourcesDialog/SourcesDialog.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/sourcesDialog/SourcesDialog.kt index f751efdb..99e8853d 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/sourcesDialog/SourcesDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/sourcesDialog/SourcesDialog.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.sourcesDialog +package com.rtbishop.look4sat.presentation.sourcesDialog import android.os.Bundle import android.view.LayoutInflater diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/splashDialog/SplashDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/splashDialog/SplashDialog.kt similarity index 96% rename from app/src/main/java/com/rtbishop/look4sat/ui/splashDialog/SplashDialog.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/splashDialog/SplashDialog.kt index 526b9fa9..54c9a6f1 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/splashDialog/SplashDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/splashDialog/SplashDialog.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.splashDialog +package com.rtbishop.look4sat.presentation.splashDialog import android.os.Bundle import android.view.LayoutInflater diff --git a/app/src/main/java/com/rtbishop/look4sat/utility/DataMapper.kt b/app/src/main/java/com/rtbishop/look4sat/utility/DataMapper.kt new file mode 100644 index 00000000..71f8b833 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/utility/DataMapper.kt @@ -0,0 +1,69 @@ +package com.rtbishop.look4sat.utility + +import com.rtbishop.look4sat.framework.model.SatEntry +import com.rtbishop.look4sat.framework.model.SatItem +import com.rtbishop.look4sat.framework.model.SatTrans +import com.rtbishop.look4sat.domain.model.SatEntry as DomainEntry +import com.rtbishop.look4sat.domain.model.SatItem as DomainItem +import com.rtbishop.look4sat.domain.model.SatTrans as DomainTrans + +object DataMapper { + + // Framework to Domain + + fun satEntryToDomainEntry(entry: SatEntry): DomainEntry { + return DomainEntry(entry.tle, entry.catNum, entry.name, entry.isSelected) + } + + fun satEntriesToDomainEntries(entries: List): List { + return entries.map { entry -> satEntryToDomainEntry(entry) } + } + + fun satItemToDomainItem(item: SatItem): DomainItem { + return DomainItem(item.catNum, item.name, item.isSelected, item.modes) + } + + fun satItemsToDomainItems(items: List): List { + return items.map { item -> satItemToDomainItem(item) } + } + + fun satTransToDomainTrans(transmitter: SatTrans): DomainTrans { + return DomainTrans( + transmitter.uuid, transmitter.info, transmitter.isAlive, transmitter.downlink, + transmitter.uplink, transmitter.mode, transmitter.isInverted, transmitter.catNum + ) + } + + fun satTransListToDomainTransList(transmitters: List): List { + return transmitters.map { transmitter -> satTransToDomainTrans(transmitter) } + } + + // Domain to Framework + + fun domainEntryToSatEntry(entry: DomainEntry): SatEntry { + return SatEntry(entry.tle, entry.catNum, entry.name, entry.isSelected) + } + + fun domainEntriesToSatEntries(entries: List): List { + return entries.map { entry -> domainEntryToSatEntry(entry) } + } + + fun domainItemToSatItem(item: DomainItem): SatItem { + return SatItem(item.catNum, item.name, item.isSelected, item.modes) + } + + fun domainItemsToSatItems(items: List): List { + return items.map { item -> domainItemToSatItem(item) } + } + + fun domainTransToSatTrans(transmitter: DomainTrans): SatTrans { + return SatTrans( + transmitter.uuid, transmitter.info, transmitter.isAlive, transmitter.downlink, + transmitter.uplink, transmitter.mode, transmitter.isInverted, transmitter.catNum + ) + } + + fun domainTransListToSatTransList(transmitters: List): List { + return transmitters.map { transmitter -> domainTransToSatTrans(transmitter) } + } +} diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/OrientationProvider.kt b/app/src/main/java/com/rtbishop/look4sat/utility/OrientationProvider.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/OrientationProvider.kt rename to app/src/main/java/com/rtbishop/look4sat/utility/OrientationProvider.kt index 4c1adf42..9ab32b70 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/polarScreen/OrientationProvider.kt +++ b/app/src/main/java/com/rtbishop/look4sat/utility/OrientationProvider.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.ui.polarScreen +package com.rtbishop.look4sat.utility import android.hardware.Sensor import android.hardware.SensorEvent diff --git a/app/src/main/java/com/rtbishop/look4sat/data/repository/PassesRepo.kt b/app/src/main/java/com/rtbishop/look4sat/utility/PassesRepo.kt similarity index 95% rename from app/src/main/java/com/rtbishop/look4sat/data/repository/PassesRepo.kt rename to app/src/main/java/com/rtbishop/look4sat/utility/PassesRepo.kt index 9e6d8a06..067b05bf 100644 --- a/app/src/main/java/com/rtbishop/look4sat/data/repository/PassesRepo.kt +++ b/app/src/main/java/com/rtbishop/look4sat/utility/PassesRepo.kt @@ -15,13 +15,11 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.data.repository +package com.rtbishop.look4sat.utility import com.github.amsacode.predict4java.Satellite import com.rtbishop.look4sat.data.model.SatPass import com.rtbishop.look4sat.di.DefaultDispatcher -import com.rtbishop.look4sat.utility.PrefsManager -import com.rtbishop.look4sat.utility.getPredictor import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow diff --git a/app/src/main/res/layout/fragment_info.xml b/app/src/main/res/layout/fragment_info.xml index 6aaf2d64..5435fefc 100644 --- a/app/src/main/res/layout/fragment_info.xml +++ b/app/src/main/res/layout/fragment_info.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.infoScreen.InfoFragment"> + tools:context=".presentation.infoScreen.InfoFragment"> + android:name="com.rtbishop.look4sat.presentation.prefsScreen.PrefsFragment" /> 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 19e68a70..4c4063af 100644 --- a/core/src/main/java/com/rtbishop/look4sat/data/DefaultSatelliteRepo.kt +++ b/core/src/main/java/com/rtbishop/look4sat/data/DefaultSatelliteRepo.kt @@ -1,9 +1,9 @@ package com.rtbishop.look4sat.data +import com.rtbishop.look4sat.domain.SatelliteRepo import com.rtbishop.look4sat.domain.model.SatEntry import com.rtbishop.look4sat.domain.model.SatItem -import com.rtbishop.look4sat.domain.SatelliteRepo -import com.rtbishop.look4sat.domain.model.Transmitter +import com.rtbishop.look4sat.domain.model.SatTrans import com.rtbishop.look4sat.predict4kotlin.Satellite import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.coroutineScope @@ -23,7 +23,7 @@ class DefaultSatelliteRepo( return localSource.getSatItems() } - override fun getTransmittersForSat(catNum: Int): Flow> { + override fun getTransmittersForSat(catNum: Int): Flow> { return localSource.getTransmittersForSat(catNum) } @@ -44,12 +44,13 @@ class DefaultSatelliteRepo( val entries = mutableListOf() val streams = mutableListOf() sources.forEach { source -> - val stream = remoteSource.fetchFileStream(source) - if (source.contains(".zip", true)) { - val zipStream = ZipInputStream(stream).apply { nextEntry } - streams.add(zipStream) - } else { - streams.add(stream) + remoteSource.fetchFileStream(source)?.let { stream -> + if (source.contains(".zip", true)) { + val zipStream = ZipInputStream(stream).apply { nextEntry } + streams.add(zipStream) + } else { + streams.add(stream) + } } } streams.forEach { stream -> diff --git a/core/src/main/java/com/rtbishop/look4sat/data/LocalDataSource.kt b/core/src/main/java/com/rtbishop/look4sat/data/LocalDataSource.kt index a96ba648..2afb6876 100644 --- a/core/src/main/java/com/rtbishop/look4sat/data/LocalDataSource.kt +++ b/core/src/main/java/com/rtbishop/look4sat/data/LocalDataSource.kt @@ -2,7 +2,7 @@ package com.rtbishop.look4sat.data import com.rtbishop.look4sat.domain.model.SatEntry import com.rtbishop.look4sat.domain.model.SatItem -import com.rtbishop.look4sat.domain.model.Transmitter +import com.rtbishop.look4sat.domain.model.SatTrans import com.rtbishop.look4sat.predict4kotlin.Satellite import kotlinx.coroutines.flow.Flow @@ -16,7 +16,7 @@ interface LocalDataSource { suspend fun updateEntriesSelection(catNums: List, isSelected: Boolean) - fun getTransmittersForSat(catNum: Int): Flow> + fun getTransmittersForSat(catNum: Int): Flow> - suspend fun updateTransmitters(transmitters: List) + suspend fun updateTransmitters(satelliteTrans: List) } 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 29766462..cf922df7 100644 --- a/core/src/main/java/com/rtbishop/look4sat/data/RemoteDataSource.kt +++ b/core/src/main/java/com/rtbishop/look4sat/data/RemoteDataSource.kt @@ -1,11 +1,11 @@ package com.rtbishop.look4sat.data -import com.rtbishop.look4sat.domain.model.Transmitter +import com.rtbishop.look4sat.domain.model.SatTrans import java.io.InputStream interface RemoteDataSource { - fun fetchFileStream(url: String): InputStream + suspend fun fetchFileStream(url: String): InputStream? - fun fetchTransmitters(): List + 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 1f9b193e..ad81afb7 100644 --- a/core/src/main/java/com/rtbishop/look4sat/domain/SatelliteRepo.kt +++ b/core/src/main/java/com/rtbishop/look4sat/domain/SatelliteRepo.kt @@ -1,7 +1,7 @@ package com.rtbishop.look4sat.domain import com.rtbishop.look4sat.domain.model.SatItem -import com.rtbishop.look4sat.domain.model.Transmitter +import com.rtbishop.look4sat.domain.model.SatTrans import com.rtbishop.look4sat.predict4kotlin.Satellite import kotlinx.coroutines.flow.Flow import java.io.InputStream @@ -10,7 +10,7 @@ interface SatelliteRepo { fun getSatItems(): Flow> - fun getTransmittersForSat(catNum: Int): Flow> + fun getTransmittersForSat(catNum: Int): Flow> suspend fun getSelectedSatellites(): List diff --git a/core/src/main/java/com/rtbishop/look4sat/domain/model/SatEntry.kt b/core/src/main/java/com/rtbishop/look4sat/domain/model/SatEntry.kt index 6db2f6f6..e92e1462 100644 --- a/core/src/main/java/com/rtbishop/look4sat/domain/model/SatEntry.kt +++ b/core/src/main/java/com/rtbishop/look4sat/domain/model/SatEntry.kt @@ -4,7 +4,7 @@ import com.rtbishop.look4sat.predict4kotlin.TLE data class SatEntry( val tle: TLE, - var isSelected: Boolean = false, val catNum: Int = tle.catnum, - val name: String = tle.name + val name: String = tle.name, + var isSelected: Boolean = false ) diff --git a/core/src/main/java/com/rtbishop/look4sat/domain/model/Transmitter.kt b/core/src/main/java/com/rtbishop/look4sat/domain/model/SatTrans.kt similarity index 90% rename from core/src/main/java/com/rtbishop/look4sat/domain/model/Transmitter.kt rename to core/src/main/java/com/rtbishop/look4sat/domain/model/SatTrans.kt index a7ccf6f4..5daaf9b5 100644 --- a/core/src/main/java/com/rtbishop/look4sat/domain/model/Transmitter.kt +++ b/core/src/main/java/com/rtbishop/look4sat/domain/model/SatTrans.kt @@ -1,6 +1,6 @@ package com.rtbishop.look4sat.domain.model -data class Transmitter( +data class SatTrans( val uuid: String, val info: String, val isAlive: Boolean, diff --git a/core/src/main/java/com/rtbishop/look4sat/interactors/GetTransmittersForSat.kt b/core/src/main/java/com/rtbishop/look4sat/interactors/GetTransmittersForSat.kt index 403c25ed..eac8da22 100644 --- a/core/src/main/java/com/rtbishop/look4sat/interactors/GetTransmittersForSat.kt +++ b/core/src/main/java/com/rtbishop/look4sat/interactors/GetTransmittersForSat.kt @@ -1,12 +1,12 @@ package com.rtbishop.look4sat.interactors import com.rtbishop.look4sat.domain.SatelliteRepo -import com.rtbishop.look4sat.domain.model.Transmitter +import com.rtbishop.look4sat.domain.model.SatTrans import kotlinx.coroutines.flow.Flow class GetTransmittersForSat(private val satelliteRepo: SatelliteRepo) { - operator fun invoke(catNum: Int): Flow> { + operator fun invoke(catNum: Int): Flow> { return satelliteRepo.getTransmittersForSat(catNum) } } \ No newline at end of file diff --git a/core/src/main/java/com/rtbishop/look4sat/predict4kotlin/Satellite.kt b/core/src/main/java/com/rtbishop/look4sat/predict4kotlin/Satellite.kt index 5698e39e..5a65293f 100644 --- a/core/src/main/java/com/rtbishop/look4sat/predict4kotlin/Satellite.kt +++ b/core/src/main/java/com/rtbishop/look4sat/predict4kotlin/Satellite.kt @@ -349,9 +349,12 @@ abstract class Satellite(val tle: TLE) { companion object { - fun createSat(tle: TLE): Satellite { - return if (tle.isDeepspace) DeepSpaceSat(tle) - else NearEarthSat(tle) + fun createSat(tle: TLE?): Satellite? { + return when { + tle == null -> null + tle.isDeepspace -> DeepSpaceSat(tle) + else -> NearEarthSat(tle) + } } fun importTLE(tleStream: InputStream): List {