mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Switched to GridLayoutManager in entries recycler, classes moved
This commit is contained in:
1 parent
db8fe3ce8d
commit
af7e027350
51 files changed
+264
-251
No files matched your search
@@ -20,9 +20,9 @@ package com.rtbishop.look4sat.framework
|
||||
import com.rtbishop.look4sat.framework.model.SatEntry
|
||||
import com.rtbishop.look4sat.framework.model.SatItem
|
||||
import com.rtbishop.look4sat.framework.model.Transmitter
|
||||
import com.rtbishop.look4sat.model.SatEntry as DomainEntry
|
||||
import com.rtbishop.look4sat.model.SatItem as DomainItem
|
||||
import com.rtbishop.look4sat.model.Transmitter as DomainTrans
|
||||
import com.rtbishop.look4sat.domain.model.SatEntry as DomainEntry
|
||||
import com.rtbishop.look4sat.domain.model.SatItem as DomainItem
|
||||
import com.rtbishop.look4sat.domain.model.Transmitter as DomainTrans
|
||||
|
||||
object DataMapper {
|
||||
|
||||
|
||||
@@ -21,8 +21,8 @@ import android.content.SharedPreferences
|
||||
import android.hardware.GeomagneticField
|
||||
import android.location.LocationManager
|
||||
import androidx.core.content.edit
|
||||
import com.rtbishop.look4sat.common.Constants
|
||||
import com.rtbishop.look4sat.predict4kotlin.GeoPos
|
||||
import com.rtbishop.look4sat.domain.Constants
|
||||
import com.rtbishop.look4sat.domain.predict.GeoPos
|
||||
import com.rtbishop.look4sat.domain.QthConverter
|
||||
import com.rtbishop.look4sat.utility.round
|
||||
import com.squareup.moshi.Moshi
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
package com.rtbishop.look4sat.framework.local
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
import com.rtbishop.look4sat.predict4kotlin.Satellite
|
||||
import com.rtbishop.look4sat.predict4kotlin.TLE
|
||||
import com.rtbishop.look4sat.domain.predict.Satellite
|
||||
import com.rtbishop.look4sat.domain.predict.TLE
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
import com.squareup.moshi.Moshi
|
||||
|
||||
|
||||
@@ -18,10 +18,10 @@
|
||||
package com.rtbishop.look4sat.framework.local
|
||||
|
||||
import com.rtbishop.look4sat.data.LocalDataSource
|
||||
import com.rtbishop.look4sat.model.SatEntry
|
||||
import com.rtbishop.look4sat.model.SatItem
|
||||
import com.rtbishop.look4sat.predict4kotlin.Satellite
|
||||
import com.rtbishop.look4sat.model.Transmitter
|
||||
import com.rtbishop.look4sat.domain.model.SatEntry
|
||||
import com.rtbishop.look4sat.domain.model.SatItem
|
||||
import com.rtbishop.look4sat.domain.predict.Satellite
|
||||
import com.rtbishop.look4sat.domain.model.Transmitter
|
||||
import com.rtbishop.look4sat.framework.DataMapper
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
||||
@@ -21,7 +21,7 @@ import androidx.room.*
|
||||
import com.rtbishop.look4sat.framework.model.SatEntry
|
||||
import com.rtbishop.look4sat.framework.model.SatItem
|
||||
import com.rtbishop.look4sat.framework.model.Transmitter
|
||||
import com.rtbishop.look4sat.predict4kotlin.Satellite
|
||||
import com.rtbishop.look4sat.domain.predict.Satellite
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
|
||||
@@ -19,7 +19,7 @@ package com.rtbishop.look4sat.framework.model
|
||||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
import com.rtbishop.look4sat.predict4kotlin.TLE
|
||||
import com.rtbishop.look4sat.domain.predict.TLE
|
||||
|
||||
@Entity(tableName = "entries")
|
||||
data class SatEntry(
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
package com.rtbishop.look4sat.framework.remote
|
||||
|
||||
import com.rtbishop.look4sat.data.RemoteDataSource
|
||||
import com.rtbishop.look4sat.model.Transmitter
|
||||
import com.rtbishop.look4sat.domain.model.Transmitter
|
||||
import com.rtbishop.look4sat.framework.DataMapper
|
||||
import java.io.InputStream
|
||||
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.injection
|
||||
|
||||
import android.content.ContentResolver
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.hardware.SensorManager
|
||||
import android.location.LocationManager
|
||||
import androidx.preference.PreferenceManager
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
object AndroidModule {
|
||||
|
||||
@Provides
|
||||
fun provideContentResolver(@ApplicationContext context: Context): ContentResolver {
|
||||
return context.contentResolver
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun provideLocationManager(@ApplicationContext context: Context): LocationManager {
|
||||
return context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun provideSensorManager(@ApplicationContext context: Context): SensorManager {
|
||||
return context.getSystemService(Context.SENSOR_SERVICE) as SensorManager
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun provideSharedPreferences(@ApplicationContext context: Context): SharedPreferences {
|
||||
return PreferenceManager.getDefaultSharedPreferences(context)
|
||||
}
|
||||
}
|
||||
+35
-50
@@ -17,35 +17,53 @@
|
||||
*/
|
||||
package com.rtbishop.look4sat.injection
|
||||
|
||||
import android.content.ContentResolver
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.hardware.SensorManager
|
||||
import android.location.LocationManager
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.room.Room
|
||||
import com.rtbishop.look4sat.data.LocalDataSource
|
||||
import com.rtbishop.look4sat.data.RemoteDataSource
|
||||
import com.rtbishop.look4sat.data.DataRepository
|
||||
import com.rtbishop.look4sat.framework.remote.SatelliteApi
|
||||
import com.rtbishop.look4sat.common.Constants
|
||||
import com.rtbishop.look4sat.domain.Repository
|
||||
import com.rtbishop.look4sat.domain.Constants
|
||||
import com.rtbishop.look4sat.framework.PreferencesSource
|
||||
import com.rtbishop.look4sat.domain.DataReporter
|
||||
import com.rtbishop.look4sat.predict4kotlin.Predictor
|
||||
import com.rtbishop.look4sat.framework.remote.RemoteSource
|
||||
import com.rtbishop.look4sat.framework.local.*
|
||||
import com.rtbishop.look4sat.framework.local.Converters
|
||||
import com.rtbishop.look4sat.framework.local.MIGRATION_1_2
|
||||
import com.rtbishop.look4sat.framework.local.SatelliteDao
|
||||
import com.rtbishop.look4sat.framework.local.SatelliteDb
|
||||
import com.rtbishop.look4sat.framework.remote.SatelliteApi
|
||||
import com.squareup.moshi.Moshi
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.converter.moshi.MoshiConverterFactory
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
object Look4SatModule {
|
||||
object AppModule {
|
||||
|
||||
@Provides
|
||||
fun provideContentResolver(@ApplicationContext context: Context): ContentResolver {
|
||||
return context.contentResolver
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun provideLocationManager(@ApplicationContext context: Context): LocationManager {
|
||||
return context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun provideSensorManager(@ApplicationContext context: Context): SensorManager {
|
||||
return context.getSystemService(Context.SENSOR_SERVICE) as SensorManager
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun provideSharedPreferences(@ApplicationContext context: Context): SharedPreferences {
|
||||
return PreferenceManager.getDefaultSharedPreferences(context)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@@ -65,23 +83,11 @@ object Look4SatModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun providePredictor(@DefaultDispatcher dispatcher: CoroutineDispatcher): Predictor {
|
||||
return Predictor(dispatcher)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideSatelliteRepo(
|
||||
localSource: LocalDataSource,
|
||||
remoteSource: RemoteDataSource,
|
||||
@IoDispatcher dispatcher: CoroutineDispatcher
|
||||
): Repository {
|
||||
return DataRepository(localSource, remoteSource, dispatcher)
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun provideLocalDataSource(satelliteDao: SatelliteDao): LocalDataSource {
|
||||
return LocalSource(satelliteDao)
|
||||
fun provideSatelliteApi(): SatelliteApi {
|
||||
return Retrofit.Builder()
|
||||
.baseUrl(Constants.URL_BASE)
|
||||
.addConverterFactory(MoshiConverterFactory.create())
|
||||
.build().create(SatelliteApi::class.java)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@@ -97,25 +103,4 @@ object Look4SatModule {
|
||||
return Room.databaseBuilder(context, SatelliteDb::class.java, "SatelliteDb")
|
||||
.addMigrations(MIGRATION_1_2).build()
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideRemoteDataSource(satelliteApi: SatelliteApi): RemoteDataSource {
|
||||
return RemoteSource(satelliteApi)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideSatelliteService(): SatelliteApi {
|
||||
return Retrofit.Builder()
|
||||
.baseUrl(Constants.URL_BASE)
|
||||
.addConverterFactory(MoshiConverterFactory.create())
|
||||
.build().create(SatelliteApi::class.java)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideDataReporter(@IoDispatcher dispatcher: CoroutineDispatcher): DataReporter {
|
||||
return DataReporter(dispatcher)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.injection
|
||||
|
||||
import com.rtbishop.look4sat.data.LocalDataSource
|
||||
import com.rtbishop.look4sat.data.RemoteDataSource
|
||||
import com.rtbishop.look4sat.data.DataRepository
|
||||
import com.rtbishop.look4sat.framework.remote.SatelliteApi
|
||||
import com.rtbishop.look4sat.domain.SatelliteRepo
|
||||
import com.rtbishop.look4sat.domain.DataReporter
|
||||
import com.rtbishop.look4sat.domain.predict.Predictor
|
||||
import com.rtbishop.look4sat.framework.remote.RemoteSource
|
||||
import com.rtbishop.look4sat.framework.local.*
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
object CoreModule {
|
||||
|
||||
@Provides
|
||||
fun provideLocalDataSource(satelliteDao: SatelliteDao): LocalDataSource {
|
||||
return LocalSource(satelliteDao)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideRemoteDataSource(satelliteApi: SatelliteApi): RemoteDataSource {
|
||||
return RemoteSource(satelliteApi)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideSatelliteRepo(
|
||||
localSource: LocalDataSource,
|
||||
remoteSource: RemoteDataSource,
|
||||
@IoDispatcher dispatcher: CoroutineDispatcher
|
||||
): SatelliteRepo {
|
||||
return DataRepository(localSource, remoteSource, dispatcher)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun providePredictor(@DefaultDispatcher dispatcher: CoroutineDispatcher): Predictor {
|
||||
return Predictor(dispatcher)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideDataReporter(@IoDispatcher dispatcher: CoroutineDispatcher): DataReporter {
|
||||
return DataReporter(dispatcher)
|
||||
}
|
||||
}
|
||||
File renamed without changes.
+2
-2
@@ -22,7 +22,7 @@ import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.AsyncListDiffer
|
||||
import androidx.recyclerview.widget.DiffUtil
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.rtbishop.look4sat.model.SatItem
|
||||
import com.rtbishop.look4sat.domain.model.SatItem
|
||||
import com.rtbishop.look4sat.databinding.ItemEntryBinding
|
||||
|
||||
class EntriesAdapter(private val clickListener: EntriesClickListener) :
|
||||
@@ -57,7 +57,7 @@ class EntriesAdapter(private val clickListener: EntriesClickListener) :
|
||||
RecyclerView.ViewHolder(binding.root) {
|
||||
|
||||
fun bind(item: SatItem, listener: EntriesClickListener) {
|
||||
binding.entryCheckbox.text = item.name
|
||||
binding.entryName.text = item.name
|
||||
binding.entryCheckbox.isChecked = item.isSelected
|
||||
itemView.setOnClickListener {
|
||||
listener.updateSelection(listOf(item.catNum), item.isSelected.not())
|
||||
|
||||
+5
-5
@@ -23,13 +23,13 @@ import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.model.SatItem
|
||||
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
|
||||
import com.rtbishop.look4sat.common.DataState
|
||||
import com.rtbishop.look4sat.domain.model.SatItem
|
||||
import com.rtbishop.look4sat.domain.DataState
|
||||
import com.rtbishop.look4sat.presentation.ItemDivider
|
||||
import com.rtbishop.look4sat.utility.getNavResult
|
||||
import com.rtbishop.look4sat.utility.navigateSafe
|
||||
@@ -51,7 +51,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
||||
}
|
||||
|
||||
private fun setupComponents(view: View) {
|
||||
val entriesAdapter = EntriesAdapter(object: EntriesAdapter.EntriesClickListener {
|
||||
val entriesAdapter = EntriesAdapter(object : EntriesAdapter.EntriesClickListener {
|
||||
override fun updateSelection(catNums: List<Int>, isSelected: Boolean) {
|
||||
viewModel.updateSelection(catNums, isSelected)
|
||||
}
|
||||
@@ -60,7 +60,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
||||
entriesRecycler.apply {
|
||||
setHasFixedSize(true)
|
||||
adapter = entriesAdapter
|
||||
layoutManager = LinearLayoutManager(requireContext())
|
||||
layoutManager = GridLayoutManager(requireContext(), 2)
|
||||
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
|
||||
addItemDecoration(ItemDivider(R.drawable.rec_divider_light))
|
||||
}
|
||||
|
||||
+4
-4
@@ -21,9 +21,9 @@ import android.content.ContentResolver
|
||||
import android.net.Uri
|
||||
import android.widget.SearchView
|
||||
import androidx.lifecycle.*
|
||||
import com.rtbishop.look4sat.model.SatItem
|
||||
import com.rtbishop.look4sat.common.DataState
|
||||
import com.rtbishop.look4sat.domain.Repository
|
||||
import com.rtbishop.look4sat.domain.model.SatItem
|
||||
import com.rtbishop.look4sat.domain.DataState
|
||||
import com.rtbishop.look4sat.domain.SatelliteRepo
|
||||
import com.rtbishop.look4sat.framework.PreferencesSource
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.CoroutineExceptionHandler
|
||||
@@ -37,7 +37,7 @@ import javax.inject.Inject
|
||||
class EntriesViewModel @Inject constructor(
|
||||
private val preferences: PreferencesSource,
|
||||
private val resolver: ContentResolver,
|
||||
private val satelliteRepo: Repository,
|
||||
private val satelliteRepo: SatelliteRepo,
|
||||
) : ViewModel(), SearchView.OnQueryTextListener {
|
||||
|
||||
private val coroutineHandler = CoroutineExceptionHandler { _, throwable ->
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
*/
|
||||
package com.rtbishop.look4sat.presentation.mapScreen
|
||||
|
||||
import com.rtbishop.look4sat.predict4kotlin.GeoPos
|
||||
import com.rtbishop.look4sat.predict4kotlin.Satellite
|
||||
import com.rtbishop.look4sat.domain.predict.GeoPos
|
||||
import com.rtbishop.look4sat.domain.predict.Satellite
|
||||
|
||||
data class MapData(
|
||||
val pass: Satellite,
|
||||
|
||||
@@ -29,8 +29,8 @@ import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.FragmentMapBinding
|
||||
import com.rtbishop.look4sat.predict4kotlin.GeoPos
|
||||
import com.rtbishop.look4sat.predict4kotlin.Satellite
|
||||
import com.rtbishop.look4sat.domain.predict.GeoPos
|
||||
import com.rtbishop.look4sat.domain.predict.Satellite
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import org.osmdroid.config.Configuration
|
||||
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
|
||||
|
||||
@@ -18,12 +18,12 @@
|
||||
package com.rtbishop.look4sat.presentation.mapScreen
|
||||
|
||||
import androidx.lifecycle.*
|
||||
import com.rtbishop.look4sat.predict4kotlin.Predictor
|
||||
import com.rtbishop.look4sat.domain.Repository
|
||||
import com.rtbishop.look4sat.domain.predict.Predictor
|
||||
import com.rtbishop.look4sat.domain.SatelliteRepo
|
||||
import com.rtbishop.look4sat.framework.PreferencesSource
|
||||
import com.rtbishop.look4sat.predict4kotlin.GeoPos
|
||||
import com.rtbishop.look4sat.domain.predict.GeoPos
|
||||
import com.rtbishop.look4sat.domain.QthConverter
|
||||
import com.rtbishop.look4sat.predict4kotlin.Satellite
|
||||
import com.rtbishop.look4sat.domain.predict.Satellite
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.*
|
||||
import java.util.*
|
||||
@@ -33,7 +33,7 @@ import kotlin.math.min
|
||||
|
||||
@HiltViewModel
|
||||
class MapViewModel @Inject constructor(
|
||||
private val satelliteRepo: Repository,
|
||||
private val satelliteRepo: SatelliteRepo,
|
||||
private val predictor: Predictor,
|
||||
private val preferences: PreferencesSource,
|
||||
) : ViewModel() {
|
||||
@@ -162,7 +162,7 @@ class MapViewModel @Inject constructor(
|
||||
val osmLat = clipLat(Math.toDegrees(satPos.latitude))
|
||||
val osmLon = clipLon(Math.toDegrees(satPos.longitude))
|
||||
val osmPos = GeoPos(osmLat, osmLon)
|
||||
val qthLoc = QthConverter.positionToQTH(osmPos.latitude, osmPos.longitude) ?: "-- --"
|
||||
val qthLoc = QthConverter.positionToQth(osmPos.latitude, osmPos.longitude) ?: "-- --"
|
||||
val satData = MapData(
|
||||
satellite, satellite.params.catnum, satellite.params.name, satPos.range,
|
||||
satPos.altitude, satPos.getOrbitalVelocity(), qthLoc, osmPos
|
||||
|
||||
@@ -25,7 +25,7 @@ import androidx.recyclerview.widget.RecyclerView
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.ItemPassGeoBinding
|
||||
import com.rtbishop.look4sat.databinding.ItemPassLeoBinding
|
||||
import com.rtbishop.look4sat.predict4kotlin.SatPass
|
||||
import com.rtbishop.look4sat.domain.predict.SatPass
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
|
||||
@@ -29,8 +29,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.FragmentPassesBinding
|
||||
import com.rtbishop.look4sat.predict4kotlin.SatPass
|
||||
import com.rtbishop.look4sat.common.DataState
|
||||
import com.rtbishop.look4sat.domain.predict.SatPass
|
||||
import com.rtbishop.look4sat.domain.DataState
|
||||
import com.rtbishop.look4sat.presentation.ItemDivider
|
||||
import com.rtbishop.look4sat.utility.navigateSafe
|
||||
import com.rtbishop.look4sat.utility.toTimerString
|
||||
|
||||
+5
-5
@@ -21,10 +21,10 @@ import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.rtbishop.look4sat.predict4kotlin.Predictor
|
||||
import com.rtbishop.look4sat.predict4kotlin.SatPass
|
||||
import com.rtbishop.look4sat.common.DataState
|
||||
import com.rtbishop.look4sat.domain.Repository
|
||||
import com.rtbishop.look4sat.domain.predict.Predictor
|
||||
import com.rtbishop.look4sat.domain.predict.SatPass
|
||||
import com.rtbishop.look4sat.domain.DataState
|
||||
import com.rtbishop.look4sat.domain.SatelliteRepo
|
||||
import com.rtbishop.look4sat.framework.PreferencesSource
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.*
|
||||
@@ -34,7 +34,7 @@ import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class PassesViewModel @Inject constructor(
|
||||
private val satelliteRepo: Repository,
|
||||
private val satelliteRepo: SatelliteRepo,
|
||||
private val predictor: Predictor,
|
||||
private val preferences: PreferencesSource
|
||||
) : ViewModel() {
|
||||
|
||||
@@ -17,6 +17,6 @@
|
||||
*/
|
||||
package com.rtbishop.look4sat.presentation.radarScreen
|
||||
|
||||
import com.rtbishop.look4sat.predict4kotlin.SatPos
|
||||
import com.rtbishop.look4sat.domain.predict.SatPos
|
||||
|
||||
data class RadarData(val satPos: SatPos, val satTrack: List<SatPos> = emptyList())
|
||||
@@ -27,8 +27,8 @@ import androidx.recyclerview.widget.SimpleItemAnimator
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.FragmentRadarBinding
|
||||
import com.rtbishop.look4sat.framework.PreferencesSource
|
||||
import com.rtbishop.look4sat.predict4kotlin.SatPass
|
||||
import com.rtbishop.look4sat.predict4kotlin.SatPos
|
||||
import com.rtbishop.look4sat.domain.predict.SatPass
|
||||
import com.rtbishop.look4sat.domain.predict.SatPos
|
||||
import com.rtbishop.look4sat.presentation.ItemDivider
|
||||
import com.rtbishop.look4sat.utility.navigateSafe
|
||||
import com.rtbishop.look4sat.utility.toTimerString
|
||||
|
||||
@@ -22,7 +22,7 @@ import android.graphics.*
|
||||
import android.view.View
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.predict4kotlin.SatPos
|
||||
import com.rtbishop.look4sat.domain.predict.SatPos
|
||||
import kotlin.math.cos
|
||||
import kotlin.math.min
|
||||
import kotlin.math.sin
|
||||
|
||||
@@ -19,11 +19,11 @@ package com.rtbishop.look4sat.presentation.radarScreen
|
||||
|
||||
import androidx.lifecycle.*
|
||||
import com.rtbishop.look4sat.domain.DataReporter
|
||||
import com.rtbishop.look4sat.domain.Repository
|
||||
import com.rtbishop.look4sat.predict4kotlin.Predictor
|
||||
import com.rtbishop.look4sat.predict4kotlin.SatPass
|
||||
import com.rtbishop.look4sat.predict4kotlin.SatPos
|
||||
import com.rtbishop.look4sat.model.Transmitter
|
||||
import com.rtbishop.look4sat.domain.SatelliteRepo
|
||||
import com.rtbishop.look4sat.domain.predict.Predictor
|
||||
import com.rtbishop.look4sat.domain.predict.SatPass
|
||||
import com.rtbishop.look4sat.domain.predict.SatPos
|
||||
import com.rtbishop.look4sat.domain.model.Transmitter
|
||||
import com.rtbishop.look4sat.framework.OrientationSource
|
||||
import com.rtbishop.look4sat.framework.PreferencesSource
|
||||
import com.rtbishop.look4sat.utility.round
|
||||
@@ -40,7 +40,7 @@ class RadarViewModel @Inject constructor(
|
||||
private val orientationSource: OrientationSource,
|
||||
private val preferences: PreferencesSource,
|
||||
private val predictor: Predictor,
|
||||
private val satelliteRepo: Repository,
|
||||
private val satelliteRepo: SatelliteRepo,
|
||||
private val dataReporter: DataReporter
|
||||
) : ViewModel(), OrientationSource.OrientationListener {
|
||||
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ import androidx.recyclerview.widget.DiffUtil
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.ItemTransBinding
|
||||
import com.rtbishop.look4sat.model.Transmitter
|
||||
import com.rtbishop.look4sat.domain.model.Transmitter
|
||||
import java.util.*
|
||||
|
||||
class TransmittersAdapter : RecyclerView.Adapter<TransmittersAdapter.TransHolder>() {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
android:id="@+id/entries_import_msg"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginStart="18dp"
|
||||
android:elevation="4dp"
|
||||
android:text="@string/entries_update"
|
||||
android:textSize="18sp"
|
||||
@@ -53,13 +53,15 @@
|
||||
<SearchView
|
||||
android:id="@+id/entries_search_bar"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginStart="2dp"
|
||||
android:iconifiedByDefault="false"
|
||||
android:queryHint="@string/entries_search_hint"
|
||||
android:searchIcon="@null"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/entries_select_mode"
|
||||
app:layout_constraintEnd_toStartOf="@+id/entries_select_mode"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/entries_bar" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/entries_import_web" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/entries_select_mode"
|
||||
@@ -86,6 +88,7 @@
|
||||
android:id="@+id/entries_recycler"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:padding="2dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
||||
@@ -1,13 +1,50 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.checkbox.MaterialCheckBox xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/entry_checkbox"
|
||||
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/entry_card"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:background="@null"
|
||||
android:button="@null"
|
||||
android:drawableEnd="?android:attr/listChoiceIndicatorMultiple"
|
||||
android:paddingStart="24dp"
|
||||
android:paddingEnd="20dp"
|
||||
android:text="@string/placeholder"
|
||||
android:textColor="@color/greyLight"
|
||||
android:textSize="16sp" />
|
||||
android:layout_height="wrap_content"
|
||||
app:cardCornerRadius="8dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/entry_root"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/entry_name"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:text="@string/placeholder"
|
||||
android:textColor="@color/greyLight"
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/entry_checkbox"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.google.android.material.checkbox.MaterialCheckBox
|
||||
android:id="@+id/entry_checkbox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:minWidth="0dp"
|
||||
android:minHeight="0dp"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/entry_name"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/entry_name"
|
||||
app:layout_constraintTop_toTopOf="@+id/entry_name"
|
||||
tools:ignore="TouchTargetSizeCheck" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
@@ -17,7 +17,7 @@
|
||||
<string name="sources_error">Пожалуйста, проверьте URL</string>
|
||||
|
||||
<string name="entries_update">Обновить спутники:</string>
|
||||
<string name="entries_search_hint">Имя / Номер</string>
|
||||
<string name="entries_search_hint">Поиск по Имени / Id</string>
|
||||
<string name="entries_update_error">Ошибка обновления спутников</string>
|
||||
|
||||
<string name="modes_title">Выберите модуляцию трансивера</string>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<string name="sources_error">Please check the entered URL</string>
|
||||
|
||||
<string name="entries_update">TLE data update:</string>
|
||||
<string name="entries_search_hint">Name / Id</string>
|
||||
<string name="entries_search_hint">Search by Name / Id</string>
|
||||
<string name="entries_update_error">Error importing satellite data</string>
|
||||
|
||||
<string name="modes_title">Choose transceiver mode</string>
|
||||
|
||||
@@ -17,12 +17,12 @@
|
||||
*/
|
||||
package com.rtbishop.look4sat.data
|
||||
|
||||
import com.rtbishop.look4sat.domain.Repository
|
||||
import com.rtbishop.look4sat.model.SatEntry
|
||||
import com.rtbishop.look4sat.model.SatItem
|
||||
import com.rtbishop.look4sat.model.Transmitter
|
||||
import com.rtbishop.look4sat.predict4kotlin.Satellite
|
||||
import com.rtbishop.look4sat.predict4kotlin.TLE
|
||||
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.model.Transmitter
|
||||
import com.rtbishop.look4sat.domain.predict.Satellite
|
||||
import com.rtbishop.look4sat.domain.predict.TLE
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.coroutineScope
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
@@ -35,7 +35,7 @@ class DataRepository(
|
||||
private val localSource: LocalDataSource,
|
||||
private val remoteSource: RemoteDataSource,
|
||||
private val repoDispatcher: CoroutineDispatcher
|
||||
) : Repository {
|
||||
) : SatelliteRepo {
|
||||
|
||||
override fun getSatItems(): Flow<List<SatItem>> {
|
||||
return localSource.getEntriesWithModes()
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
*/
|
||||
package com.rtbishop.look4sat.data
|
||||
|
||||
import com.rtbishop.look4sat.model.SatEntry
|
||||
import com.rtbishop.look4sat.model.SatItem
|
||||
import com.rtbishop.look4sat.model.Transmitter
|
||||
import com.rtbishop.look4sat.predict4kotlin.Satellite
|
||||
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.predict.Satellite
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface LocalDataSource {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
*/
|
||||
package com.rtbishop.look4sat.data
|
||||
|
||||
import com.rtbishop.look4sat.model.Transmitter
|
||||
import com.rtbishop.look4sat.domain.model.Transmitter
|
||||
import java.io.InputStream
|
||||
|
||||
interface RemoteDataSource {
|
||||
|
||||
+1
-2
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.common
|
||||
package com.rtbishop.look4sat.domain
|
||||
|
||||
object Constants {
|
||||
|
||||
@@ -24,5 +24,4 @@ object Constants {
|
||||
const val URL_AMSAT = "https://amsat.org/tle/current/nasabare.txt"
|
||||
const val URL_PRISM_CLASSFD = "https://www.prismnet.com/~mmccants/tles/classfd.zip"
|
||||
const val URL_PRISM_INTEL = "https://www.prismnet.com/~mmccants/tles/inttles.zip"
|
||||
|
||||
}
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.common
|
||||
package com.rtbishop.look4sat.domain
|
||||
|
||||
sealed class DataState<out T> {
|
||||
data class Success<out T>(val data: T) : DataState<T>()
|
||||
@@ -17,14 +17,14 @@
|
||||
*/
|
||||
package com.rtbishop.look4sat.domain
|
||||
|
||||
import com.rtbishop.look4sat.predict4kotlin.GeoPos
|
||||
import com.rtbishop.look4sat.domain.predict.GeoPos
|
||||
import kotlin.math.round
|
||||
|
||||
object QthConverter {
|
||||
|
||||
fun qthToPosition(qthString: String): GeoPos? {
|
||||
val trimmedQth = qthString.take(6)
|
||||
if (!isValidQTH(trimmedQth)) return null
|
||||
if (!isValidQth(trimmedQth)) return null
|
||||
val lonFirst = (trimmedQth[0].uppercaseChar().code - 65) * 20
|
||||
val latFirst = (trimmedQth[1].uppercaseChar().code - 65) * 10
|
||||
val lonSecond = trimmedQth[2].toString().toInt() * 2
|
||||
@@ -36,7 +36,7 @@ object QthConverter {
|
||||
return GeoPos(latitude, longitude)
|
||||
}
|
||||
|
||||
fun positionToQTH(lat: Double, lon: Double): String? {
|
||||
fun positionToQth(lat: Double, lon: Double): String? {
|
||||
if (!isValidPosition(lat, lon)) return null
|
||||
val tempLon = if (lon > 180.0) lon - 360 else lon
|
||||
val upper = "ABCDEFGHIJKLMNOPQRSTUVWX"
|
||||
@@ -52,7 +52,7 @@ object QthConverter {
|
||||
return "$lonFirst$latFirst$lonSecond$latSecond$lonThird$latThird"
|
||||
}
|
||||
|
||||
private fun isValidQTH(qthString: String): Boolean {
|
||||
private fun isValidQth(qthString: String): Boolean {
|
||||
val qthPattern = "[a-xA-X][a-xA-X][0-9][0-9][a-xA-X][a-xA-X]".toRegex()
|
||||
return qthString.matches(qthPattern)
|
||||
}
|
||||
|
||||
+4
-4
@@ -17,13 +17,13 @@
|
||||
*/
|
||||
package com.rtbishop.look4sat.domain
|
||||
|
||||
import com.rtbishop.look4sat.model.SatItem
|
||||
import com.rtbishop.look4sat.model.Transmitter
|
||||
import com.rtbishop.look4sat.predict4kotlin.Satellite
|
||||
import com.rtbishop.look4sat.domain.model.SatItem
|
||||
import com.rtbishop.look4sat.domain.model.Transmitter
|
||||
import com.rtbishop.look4sat.domain.predict.Satellite
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import java.io.InputStream
|
||||
|
||||
interface Repository {
|
||||
interface SatelliteRepo {
|
||||
|
||||
fun getSatItems(): Flow<List<SatItem>>
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.model
|
||||
package com.rtbishop.look4sat.domain.model
|
||||
|
||||
data class OMM(
|
||||
val name: String,
|
||||
+2
-2
@@ -15,9 +15,9 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.model
|
||||
package com.rtbishop.look4sat.domain.model
|
||||
|
||||
import com.rtbishop.look4sat.predict4kotlin.TLE
|
||||
import com.rtbishop.look4sat.domain.predict.TLE
|
||||
|
||||
data class SatEntry(
|
||||
val tle: TLE,
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.model
|
||||
package com.rtbishop.look4sat.domain.model
|
||||
|
||||
data class SatItem(
|
||||
val catNum: Int,
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.model
|
||||
package com.rtbishop.look4sat.domain.model
|
||||
|
||||
data class Transmitter(
|
||||
val uuid: String,
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.predict4kotlin
|
||||
package com.rtbishop.look4sat.domain.predict
|
||||
|
||||
import kotlin.math.*
|
||||
|
||||
+1
-1
@@ -15,6 +15,6 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.predict4kotlin
|
||||
package com.rtbishop.look4sat.domain.predict
|
||||
|
||||
data class GeoPos(val latitude: Double, val longitude: Double, val altitude: Double = 0.0)
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.predict4kotlin
|
||||
package com.rtbishop.look4sat.domain.predict
|
||||
|
||||
import kotlin.math.*
|
||||
|
||||
+1
-2
@@ -15,9 +15,8 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.predict4kotlin
|
||||
package com.rtbishop.look4sat.domain.predict
|
||||
|
||||
import com.rtbishop.look4sat.domain.*
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.SharedFlow
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.predict4kotlin
|
||||
package com.rtbishop.look4sat.domain.predict
|
||||
|
||||
data class SatPass(
|
||||
val aosTime: Long,
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.predict4kotlin
|
||||
package com.rtbishop.look4sat.domain.predict
|
||||
|
||||
import kotlin.math.*
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.predict4kotlin
|
||||
package com.rtbishop.look4sat.domain.predict
|
||||
|
||||
import java.util.*
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.predict4kotlin
|
||||
package com.rtbishop.look4sat.domain.predict
|
||||
|
||||
import java.io.InputStream
|
||||
import kotlin.math.pow
|
||||
@@ -1,24 +0,0 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.usecases
|
||||
|
||||
import com.rtbishop.look4sat.domain.Repository
|
||||
|
||||
class GetSelectedSatellites(private val dataRepository: Repository) {
|
||||
suspend operator fun invoke() = dataRepository.getSelectedSatellites()
|
||||
}
|
||||
+9
-13
@@ -15,8 +15,9 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.domain
|
||||
package com.rtbishop.look4sat
|
||||
|
||||
import com.rtbishop.look4sat.domain.QthConverter
|
||||
import org.junit.Test
|
||||
|
||||
class QthConverterTest {
|
||||
@@ -29,29 +30,24 @@ class QthConverterTest {
|
||||
assert(result?.latitude == 48.1458 && result.longitude == 11.6250)
|
||||
result = QthConverter.qthToPosition("gf15vc")
|
||||
assert(result?.latitude == -34.8958 && result.longitude == -56.2083)
|
||||
result = QthConverter.qthToPosition("fm18LW")
|
||||
assert(result?.latitude == 38.9375 && result.longitude == -77.0417)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `Given invalid QTH returns null`() {
|
||||
var result = QthConverter.qthToPosition("ZZ00zz")
|
||||
assert(result == null)
|
||||
result = QthConverter.qthToPosition("JN58tz")
|
||||
assert(result == null)
|
||||
assert(QthConverter.qthToPosition("ZZ00zz") == null)
|
||||
assert(QthConverter.qthToPosition("JN58") == null)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `Given valid POS returns correct QTH`() {
|
||||
assert(QthConverter.positionToQTH(51.4878, -0.2146) == "IO91vl")
|
||||
assert(QthConverter.positionToQTH(48.1466, 11.6083) == "JN58td")
|
||||
assert(QthConverter.positionToQTH(-34.91, -56.2116) == "GF15vc")
|
||||
assert(QthConverter.positionToQTH(38.92, -77.065) == "FM18lw")
|
||||
assert(QthConverter.positionToQth(51.4878, -0.2146) == "IO91vl")
|
||||
assert(QthConverter.positionToQth(48.1466, 11.6083) == "JN58td")
|
||||
assert(QthConverter.positionToQth(-34.91, -56.2116) == "GF15vc")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `Given invalid POS returns null`() {
|
||||
assert(QthConverter.positionToQTH(91.0542, -170.1142) == null)
|
||||
assert(QthConverter.positionToQTH(89.0542, -240.1142) == null)
|
||||
assert(QthConverter.positionToQth(91.0542, -170.1142) == null)
|
||||
assert(QthConverter.positionToQth(89.0542, -240.1142) == null)
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -15,8 +15,9 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.predict4kotlin
|
||||
package com.rtbishop.look4sat
|
||||
|
||||
import com.rtbishop.look4sat.domain.predict.TLE
|
||||
import org.junit.Test
|
||||
|
||||
class TleParserTest {
|
||||
Reference in new issue
Block a user