diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 35da8305..c0435b15 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,8 +34,7 @@ android:theme="@style/AppTheme"> + android:screenOrientation="portrait"> diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/AppComponent.kt b/app/src/main/java/com/rtbishop/look4sat/dagger/AppComponent.kt index 07928430..9681d4d1 100644 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/AppComponent.kt +++ b/app/src/main/java/com/rtbishop/look4sat/dagger/AppComponent.kt @@ -22,9 +22,9 @@ package com.rtbishop.look4sat.dagger import android.content.Context import com.rtbishop.look4sat.dagger.modules.* import com.rtbishop.look4sat.ui.MainActivity -import com.rtbishop.look4sat.ui.fragments.MapOsmFragment -import com.rtbishop.look4sat.ui.fragments.PassListFragment -import com.rtbishop.look4sat.ui.fragments.PolarViewFragment +import com.rtbishop.look4sat.ui.fragments.MapFragment +import com.rtbishop.look4sat.ui.fragments.PassesFragment +import com.rtbishop.look4sat.ui.fragments.PolarFragment import dagger.BindsInstance import dagger.Component import javax.inject.Singleton @@ -42,7 +42,7 @@ interface AppComponent { } fun inject(mainActivity: MainActivity) - fun inject(passListFragment: PassListFragment) - fun inject(polarViewFragment: PolarViewFragment) - fun inject(mapOsmFragment: MapOsmFragment) + fun inject(passesFragment: PassesFragment) + fun inject(polarFragment: PolarFragment) + fun inject(mapFragment: MapFragment) } diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/NetworkModule.kt b/app/src/main/java/com/rtbishop/look4sat/dagger/modules/NetworkModule.kt index ddc62ec9..cdfd6568 100644 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/NetworkModule.kt +++ b/app/src/main/java/com/rtbishop/look4sat/dagger/modules/NetworkModule.kt @@ -19,7 +19,7 @@ package com.rtbishop.look4sat.dagger.modules -import com.rtbishop.look4sat.repo.api.TransmittersApi +import com.rtbishop.look4sat.repo.remote.TransApi import dagger.Module import dagger.Provides import okhttp3.OkHttpClient @@ -32,17 +32,17 @@ class NetworkModule { @Singleton @Provides - fun provideOkHttpClient(): OkHttpClient { + fun provideWebClient(): OkHttpClient { return OkHttpClient() } @Singleton @Provides - fun provideTransmittersApi(): TransmittersApi { + fun provideTransApi(): TransApi { return Retrofit.Builder() .baseUrl("https://db.satnogs.org/api/") .addConverterFactory(GsonConverterFactory.create()) .build() - .create(TransmittersApi::class.java) + .create(TransApi::class.java) } } diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/PersistenceModule.kt b/app/src/main/java/com/rtbishop/look4sat/dagger/modules/PersistenceModule.kt index c74f2098..70dfb4ff 100644 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/PersistenceModule.kt +++ b/app/src/main/java/com/rtbishop/look4sat/dagger/modules/PersistenceModule.kt @@ -21,10 +21,10 @@ package com.rtbishop.look4sat.dagger.modules import android.content.Context import androidx.room.Room -import com.rtbishop.look4sat.repo.SatelliteDb -import com.rtbishop.look4sat.repo.dao.EntriesDao -import com.rtbishop.look4sat.repo.dao.SourcesDao -import com.rtbishop.look4sat.repo.dao.TransmittersDao +import com.rtbishop.look4sat.repo.local.EntriesDao +import com.rtbishop.look4sat.repo.local.SatDb +import com.rtbishop.look4sat.repo.local.SourcesDao +import com.rtbishop.look4sat.repo.local.TransDao import dagger.Module import dagger.Provides import javax.inject.Singleton @@ -34,26 +34,26 @@ class PersistenceModule { @Singleton @Provides - fun provideEntriesDao(db: SatelliteDb): EntriesDao { + fun provideEntriesDao(db: SatDb): EntriesDao { return db.entriesDao() } @Singleton @Provides - fun provideTransmittersDao(db: SatelliteDb): TransmittersDao { - return db.transmittersDao() + fun provideTransDao(db: SatDb): TransDao { + return db.transDao() } @Singleton @Provides - fun providesSourcesDao(db: SatelliteDb): SourcesDao { + fun providesSourcesDao(db: SatDb): SourcesDao { return db.sourcesDao() } @Singleton @Provides - fun provideSatelliteDb(context: Context): SatelliteDb { - return Room.databaseBuilder(context, SatelliteDb::class.java, "satDb") + fun provideSatDb(context: Context): SatDb { + return Room.databaseBuilder(context, SatDb::class.java, "satDb") .build() } } diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/RepoModule.kt b/app/src/main/java/com/rtbishop/look4sat/dagger/modules/RepoModule.kt index 51e97c82..c6160aee 100644 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/RepoModule.kt +++ b/app/src/main/java/com/rtbishop/look4sat/dagger/modules/RepoModule.kt @@ -4,10 +4,10 @@ import android.content.ContentResolver import android.content.Context import com.rtbishop.look4sat.repo.DefaultRepository import com.rtbishop.look4sat.repo.Repository -import com.rtbishop.look4sat.repo.api.TransmittersApi -import com.rtbishop.look4sat.repo.dao.EntriesDao -import com.rtbishop.look4sat.repo.dao.SourcesDao -import com.rtbishop.look4sat.repo.dao.TransmittersDao +import com.rtbishop.look4sat.repo.local.EntriesDao +import com.rtbishop.look4sat.repo.local.SourcesDao +import com.rtbishop.look4sat.repo.local.TransDao +import com.rtbishop.look4sat.repo.remote.TransApi import dagger.Module import dagger.Provides import okhttp3.OkHttpClient @@ -26,19 +26,19 @@ class RepoModule { @Provides fun provideDefaultRepository( resolver: ContentResolver, - transmittersApi: TransmittersApi, client: OkHttpClient, + transApi: TransApi, entriesDao: EntriesDao, - transmittersDao: TransmittersDao, + transDao: TransDao, sourcesDao: SourcesDao ): Repository { return DefaultRepository( resolver, client, - transmittersApi, + transApi, entriesDao, sourcesDao, - transmittersDao + transDao ) } } diff --git a/app/src/main/java/com/rtbishop/look4sat/data/Transmitter.kt b/app/src/main/java/com/rtbishop/look4sat/data/SatTrans.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/data/Transmitter.kt rename to app/src/main/java/com/rtbishop/look4sat/data/SatTrans.kt index a07c0088..441c9a48 100644 --- a/app/src/main/java/com/rtbishop/look4sat/data/Transmitter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/data/SatTrans.kt @@ -24,7 +24,7 @@ import androidx.room.PrimaryKey import com.google.gson.annotations.SerializedName @Entity(tableName = "transmitters") -data class Transmitter( +data class SatTrans( @PrimaryKey @SerializedName("uuid") val uuid: String, @SerializedName("description") val description: String, @SerializedName("alive") val isAlive: Boolean, diff --git a/app/src/main/java/com/rtbishop/look4sat/repo/DefaultRepository.kt b/app/src/main/java/com/rtbishop/look4sat/repo/DefaultRepository.kt index 6065999c..974836a5 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/DefaultRepository.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/DefaultRepository.kt @@ -23,12 +23,12 @@ import android.content.ContentResolver import android.net.Uri import com.github.amsacode.predict4java.TLE import com.rtbishop.look4sat.data.SatEntry +import com.rtbishop.look4sat.data.SatTrans import com.rtbishop.look4sat.data.TleSource -import com.rtbishop.look4sat.data.Transmitter -import com.rtbishop.look4sat.repo.api.TransmittersApi -import com.rtbishop.look4sat.repo.dao.EntriesDao -import com.rtbishop.look4sat.repo.dao.SourcesDao -import com.rtbishop.look4sat.repo.dao.TransmittersDao +import com.rtbishop.look4sat.repo.local.EntriesDao +import com.rtbishop.look4sat.repo.local.SourcesDao +import com.rtbishop.look4sat.repo.local.TransDao +import com.rtbishop.look4sat.repo.remote.TransApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import okhttp3.OkHttpClient @@ -39,10 +39,10 @@ import javax.inject.Inject class DefaultRepository @Inject constructor( private val resolver: ContentResolver, private val client: OkHttpClient, - private val api: TransmittersApi, + private val api: TransApi, private val entriesDao: EntriesDao, private val sourcesDao: SourcesDao, - private val transmittersDao: TransmittersDao + private val transDao: TransDao ) : Repository { override suspend fun updateEntriesFromFile(tleUri: Uri) { @@ -82,8 +82,8 @@ class DefaultRepository @Inject constructor( return@withContext streams } - override suspend fun fetchTransmitters(): List { - return api.fetchTransmitters() + override suspend fun fetchTransmitters(): List { + return api.fetchTransList() } override suspend fun insertEntries(entries: List) { @@ -112,12 +112,12 @@ class DefaultRepository @Inject constructor( override suspend fun updateTransmitters() { } - override suspend fun getTransmittersByCatNum(catNum: Int): List { - return transmittersDao.getTransmittersByCatNum(catNum) + override suspend fun getTransmittersByCatNum(catNum: Int): List { + return transDao.getTransmittersForCatNum(catNum) } override suspend fun clearTransmitters() { - transmittersDao.clearTransmitters() + transDao.clearTransmitters() } //////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt b/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt index 13d04ad8..343d87a0 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt @@ -2,8 +2,8 @@ package com.rtbishop.look4sat.repo import android.net.Uri import com.rtbishop.look4sat.data.SatEntry +import com.rtbishop.look4sat.data.SatTrans import com.rtbishop.look4sat.data.TleSource -import com.rtbishop.look4sat.data.Transmitter import java.io.InputStream interface Repository { @@ -16,7 +16,7 @@ interface Repository { suspend fun fetchTleStreams(urlList: List): List - suspend fun fetchTransmitters(): List + suspend fun fetchTransmitters(): List suspend fun insertEntries(entries: List) @@ -32,7 +32,7 @@ interface Repository { suspend fun updateTransmitters() - suspend fun getTransmittersByCatNum(catNum: Int): List + suspend fun getTransmittersByCatNum(catNum: Int): List suspend fun clearTransmitters() diff --git a/app/src/main/java/com/rtbishop/look4sat/repo/dao/EntriesDao.kt b/app/src/main/java/com/rtbishop/look4sat/repo/local/EntriesDao.kt similarity index 97% rename from app/src/main/java/com/rtbishop/look4sat/repo/dao/EntriesDao.kt rename to app/src/main/java/com/rtbishop/look4sat/repo/local/EntriesDao.kt index 54b72914..94250859 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/dao/EntriesDao.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/local/EntriesDao.kt @@ -17,7 +17,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package com.rtbishop.look4sat.repo.dao +package com.rtbishop.look4sat.repo.local import androidx.room.Dao import androidx.room.Insert diff --git a/app/src/main/java/com/rtbishop/look4sat/repo/SatelliteDb.kt b/app/src/main/java/com/rtbishop/look4sat/repo/local/SatDb.kt similarity index 76% rename from app/src/main/java/com/rtbishop/look4sat/repo/SatelliteDb.kt rename to app/src/main/java/com/rtbishop/look4sat/repo/local/SatDb.kt index d54e0038..68f5966d 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/SatelliteDb.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/local/SatDb.kt @@ -17,30 +17,27 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package com.rtbishop.look4sat.repo +package com.rtbishop.look4sat.repo.local import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.TypeConverters import com.rtbishop.look4sat.data.SatEntry +import com.rtbishop.look4sat.data.SatTrans import com.rtbishop.look4sat.data.TleSource -import com.rtbishop.look4sat.data.Transmitter -import com.rtbishop.look4sat.repo.dao.EntriesDao -import com.rtbishop.look4sat.repo.dao.SourcesDao -import com.rtbishop.look4sat.repo.dao.TransmittersDao import com.rtbishop.look4sat.utility.Converters @Database( - entities = [Transmitter::class, SatEntry::class, TleSource::class], + entities = [SatTrans::class, SatEntry::class, TleSource::class], version = 1, exportSchema = false ) @TypeConverters(Converters::class) -abstract class SatelliteDb : RoomDatabase() { +abstract class SatDb : RoomDatabase() { abstract fun entriesDao(): EntriesDao - abstract fun transmittersDao(): TransmittersDao + abstract fun transDao(): TransDao abstract fun sourcesDao(): SourcesDao } diff --git a/app/src/main/java/com/rtbishop/look4sat/repo/dao/SourcesDao.kt b/app/src/main/java/com/rtbishop/look4sat/repo/local/SourcesDao.kt similarity index 91% rename from app/src/main/java/com/rtbishop/look4sat/repo/dao/SourcesDao.kt rename to app/src/main/java/com/rtbishop/look4sat/repo/local/SourcesDao.kt index c0b8d099..54393ae0 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/dao/SourcesDao.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/local/SourcesDao.kt @@ -1,4 +1,4 @@ -package com.rtbishop.look4sat.repo.dao +package com.rtbishop.look4sat.repo.local import androidx.room.Dao import androidx.room.Insert diff --git a/app/src/main/java/com/rtbishop/look4sat/repo/dao/TransmittersDao.kt b/app/src/main/java/com/rtbishop/look4sat/repo/local/TransDao.kt similarity index 57% rename from app/src/main/java/com/rtbishop/look4sat/repo/dao/TransmittersDao.kt rename to app/src/main/java/com/rtbishop/look4sat/repo/local/TransDao.kt index 913ec579..390906f1 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/dao/TransmittersDao.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/local/TransDao.kt @@ -1,19 +1,19 @@ -package com.rtbishop.look4sat.repo.dao +package com.rtbishop.look4sat.repo.local import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query -import com.rtbishop.look4sat.data.Transmitter +import com.rtbishop.look4sat.data.SatTrans @Dao -interface TransmittersDao { +interface TransDao { @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insertTransmitters(transmitters: List) + suspend fun insertTransmitters(satTrans: List) @Query("SELECT * FROM transmitters WHERE isAlive = 1 and catNum = :catNum") - suspend fun getTransmittersByCatNum(catNum: Int): List + suspend fun getTransmittersForCatNum(catNum: Int): List @Query("DELETE FROM transmitters") suspend fun clearTransmitters() diff --git a/app/src/main/java/com/rtbishop/look4sat/repo/api/TransmittersApi.kt b/app/src/main/java/com/rtbishop/look4sat/repo/remote/TransApi.kt similarity index 84% rename from app/src/main/java/com/rtbishop/look4sat/repo/api/TransmittersApi.kt rename to app/src/main/java/com/rtbishop/look4sat/repo/remote/TransApi.kt index f98f87c9..6fcfa3ab 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/api/TransmittersApi.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/remote/TransApi.kt @@ -17,13 +17,13 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package com.rtbishop.look4sat.repo.api +package com.rtbishop.look4sat.repo.remote -import com.rtbishop.look4sat.data.Transmitter +import com.rtbishop.look4sat.data.SatTrans import retrofit2.http.GET -interface TransmittersApi { +interface TransApi { @GET("transmitters/") - suspend fun fetchTransmitters(): List + suspend fun fetchTransList(): List } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt b/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt index d97f3e98..a81a6c5a 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt @@ -19,7 +19,6 @@ class MainActivity : AppCompatActivity() { // ) override fun onCreate(savedInstanceState: Bundle?) { - setTheme(R.style.AppTheme) super.onCreate(savedInstanceState) val binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) @@ -48,7 +47,7 @@ class MainActivity : AppCompatActivity() { // } // private fun openSourcesDialog() { -// TleSourcesDialogFragment(viewModel.getTleSources()).apply { +// SourcesDialog(viewModel.getTleSources()).apply { // setSourcesListener(this@MainActivity) // show(supportFragmentManager, "TleSourcesDialog") // } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SatEntryAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/EntriesAdapter.kt similarity index 94% rename from app/src/main/java/com/rtbishop/look4sat/ui/adapters/SatEntryAdapter.kt rename to app/src/main/java/com/rtbishop/look4sat/ui/adapters/EntriesAdapter.kt index 5a3513f5..43ed20b9 100755 --- a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SatEntryAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/EntriesAdapter.kt @@ -26,8 +26,8 @@ import androidx.recyclerview.widget.RecyclerView import com.rtbishop.look4sat.data.SatEntry import com.rtbishop.look4sat.databinding.ItemSatEntryBinding -class SatEntryAdapter(private var entries: MutableList) : - RecyclerView.Adapter() { +class EntriesAdapter(private var entries: MutableList) : + RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SatEntryHolder { val binding = ItemSatEntryBinding diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SatPassAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/PassesAdapter.kt similarity index 96% rename from app/src/main/java/com/rtbishop/look4sat/ui/adapters/SatPassAdapter.kt rename to app/src/main/java/com/rtbishop/look4sat/ui/adapters/PassesAdapter.kt index 5af2bee6..685f7c6b 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SatPassAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/PassesAdapter.kt @@ -29,12 +29,12 @@ import com.rtbishop.look4sat.R import com.rtbishop.look4sat.data.SatPass import com.rtbishop.look4sat.databinding.ItemPassGeoBinding import com.rtbishop.look4sat.databinding.ItemPassLeoBinding -import com.rtbishop.look4sat.ui.fragments.PassListFragmentDirections +import com.rtbishop.look4sat.ui.fragments.PassesFragmentDirections import com.rtbishop.look4sat.utility.PrefsManager import java.text.SimpleDateFormat import java.util.* -class SatPassAdapter( +class PassesAdapter( private var satPassList: MutableList, private val prefsManager: PrefsManager ) : @@ -125,7 +125,7 @@ class SatPassAdapter( itemView.setOnClickListener { val passIndex = satPassList.indexOf(satPass) - val action = PassListFragmentDirections.actionPassToPolar(passIndex) + val action = PassesFragmentDirections.actionPassToPolar(passIndex) itemView.findNavController().navigate(action) } } @@ -148,7 +148,7 @@ class SatPassAdapter( itemView.setOnClickListener { val passIndex = satPassList.indexOf(satPass) - val action = PassListFragmentDirections.actionPassToPolar(passIndex) + val action = PassesFragmentDirections.actionPassToPolar(passIndex) itemView.findNavController().navigate(action) } } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TleSourcesAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SourcesAdapter.kt similarity index 95% rename from app/src/main/java/com/rtbishop/look4sat/ui/adapters/TleSourcesAdapter.kt rename to app/src/main/java/com/rtbishop/look4sat/ui/adapters/SourcesAdapter.kt index 1f1239e5..9a52052c 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TleSourcesAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SourcesAdapter.kt @@ -28,8 +28,8 @@ import androidx.recyclerview.widget.RecyclerView import com.rtbishop.look4sat.data.TleSource import com.rtbishop.look4sat.databinding.ItemTleSourceBinding -class TleSourcesAdapter(private var sources: MutableList) : - RecyclerView.Adapter() { +class SourcesAdapter(private var sources: MutableList) : + RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TleSourceHolder { val binding = ItemTleSourceBinding diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransmitterAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransAdapter.kt similarity index 66% rename from app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransmitterAdapter.kt rename to app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransAdapter.kt index a1b4d65b..6bdfed5c 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransmitterAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransAdapter.kt @@ -25,21 +25,21 @@ import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.data.Transmitter -import com.rtbishop.look4sat.databinding.ItemTransmitterBinding +import com.rtbishop.look4sat.data.SatTrans +import com.rtbishop.look4sat.databinding.ItemTransBinding import com.rtbishop.look4sat.utility.PassPredictor import java.util.* -class TransmitterAdapter : RecyclerView.Adapter() { +class TransAdapter : RecyclerView.Adapter() { - private var transmittersList = emptyList() + private var transmittersList = emptyList() private lateinit var predictor: PassPredictor fun setPredictor(predict: PassPredictor) { predictor = predict } - fun setList(list: List) { + fun setList(list: List) { transmittersList = list } @@ -47,86 +47,86 @@ class TransmitterAdapter : RecyclerView.Adapter) : +class EntriesDialog(private var entries: MutableList) : AppCompatDialogFragment(), SearchView.OnQueryTextListener { private lateinit var entriesListener: EntriesSubmitListener - private val entryAdapter = SatEntryAdapter(entries) + private val entryAdapter = EntriesAdapter(entries) private var selectAllToggle = true override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val binding = DialogSatEntryBinding.inflate(requireActivity().layoutInflater) + val binding = DialogEntriesBinding.inflate(requireActivity().layoutInflater) val satEntryDialog = Dialog(requireActivity()).apply { window?.requestFeature(Window.FEATURE_NO_TITLE) setContentView(binding.root) @@ -50,7 +50,7 @@ class SatEntryDialogFragment(private var entries: MutableList) : } binding.dialogSearch.apply { - setOnQueryTextListener(this@SatEntryDialogFragment) + setOnQueryTextListener(this@EntriesDialog) onActionViewExpanded() clearFocus() } @@ -67,7 +67,7 @@ class SatEntryDialogFragment(private var entries: MutableList) : return satEntryDialog } - fun setEntriesListener(listener: EntriesSubmitListener): SatEntryDialogFragment { + fun setEntriesListener(listener: EntriesSubmitListener): EntriesDialog { entriesListener = listener return this } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt new file mode 100644 index 00000000..82b1f4da --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt @@ -0,0 +1,17 @@ +package com.rtbishop.look4sat.ui.fragments + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import com.rtbishop.look4sat.R +import com.rtbishop.look4sat.databinding.FragmentEntriesBinding + +class EntriesFragment : Fragment(R.layout.fragment_entries) { + + private lateinit var binding: FragmentEntriesBinding + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding = FragmentEntriesBinding.bind(view) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapOsmFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapFragment.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapOsmFragment.kt rename to app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapFragment.kt index fefb9906..69f81a75 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapOsmFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapFragment.kt @@ -20,7 +20,7 @@ import com.rtbishop.look4sat.dagger.ViewModelFactory import com.rtbishop.look4sat.data.Result import com.rtbishop.look4sat.data.SatItem import com.rtbishop.look4sat.data.SatPass -import com.rtbishop.look4sat.databinding.FragmentMapOsmBinding +import com.rtbishop.look4sat.databinding.FragmentMapBinding import com.rtbishop.look4sat.ui.SharedViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay @@ -39,13 +39,13 @@ import javax.inject.Inject import kotlin.math.pow import kotlin.math.sqrt -class MapOsmFragment : Fragment(R.layout.fragment_map_osm) { +class MapFragment : Fragment(R.layout.fragment_map) { @Inject lateinit var modelFactory: ViewModelFactory private lateinit var mainActivity: FragmentActivity private lateinit var viewModel: SharedViewModel - private lateinit var binding: FragmentMapOsmBinding + private lateinit var binding: FragmentMapBinding private lateinit var trackPaint: Paint private lateinit var footprintPaint: Paint private lateinit var selectedPass: SatPass @@ -53,7 +53,7 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding = FragmentMapOsmBinding.bind(view) + binding = FragmentMapBinding.bind(view) mainActivity = requireActivity() (mainActivity.application as Look4SatApp).appComponent.inject(this) viewModel = ViewModelProvider(mainActivity, modelFactory).get(SharedViewModel::class.java) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassListFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassesFragment.kt similarity index 79% rename from app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassListFragment.kt rename to app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassesFragment.kt index 53173f32..2887ec9d 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassListFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassesFragment.kt @@ -36,9 +36,9 @@ import com.rtbishop.look4sat.dagger.ViewModelFactory import com.rtbishop.look4sat.data.Result import com.rtbishop.look4sat.data.SatEntry import com.rtbishop.look4sat.data.SatPass -import com.rtbishop.look4sat.databinding.FragmentPassListBinding +import com.rtbishop.look4sat.databinding.FragmentPassesBinding import com.rtbishop.look4sat.ui.SharedViewModel -import com.rtbishop.look4sat.ui.adapters.SatPassAdapter +import com.rtbishop.look4sat.ui.adapters.PassesAdapter import com.rtbishop.look4sat.utility.Extensions.snack import com.rtbishop.look4sat.utility.PrefsManager import kotlinx.coroutines.launch @@ -46,7 +46,7 @@ import java.util.* import java.util.concurrent.TimeUnit import javax.inject.Inject -class PassListFragment : Fragment(R.layout.fragment_pass_list) { +class PassesFragment : Fragment(R.layout.fragment_passes) { @Inject lateinit var modelFactory: ViewModelFactory @@ -55,10 +55,10 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { lateinit var prefsManager: PrefsManager private lateinit var viewModel: SharedViewModel - private lateinit var satPassAdapter: SatPassAdapter + private lateinit var passesAdapter: PassesAdapter private lateinit var aosTimer: CountDownTimer private lateinit var mainActivity: FragmentActivity - private lateinit var binding: FragmentPassListBinding + private lateinit var binding: FragmentPassesBinding private var isTimerSet: Boolean = false private var satPassList: MutableList = mutableListOf() @@ -66,10 +66,10 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) mainActivity = requireActivity() - binding = FragmentPassListBinding.bind(view) + binding = FragmentPassesBinding.bind(view) (mainActivity.application as Look4SatApp).appComponent.inject(this) viewModel = ViewModelProvider(mainActivity, modelFactory).get(SharedViewModel::class.java) - satPassAdapter = SatPassAdapter(satPassList, prefsManager) + passesAdapter = PassesAdapter(satPassList, prefsManager) setupObservers() setupComponents() @@ -77,7 +77,7 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { override fun onStart() { super.onStart() - if (satPassAdapter.itemCount == 0) { + if (passesAdapter.itemCount == 0) { viewModel.calculatePasses() } } @@ -87,41 +87,29 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { when (result) { is Result.Success -> { satPassList = result.data - satPassAdapter.setList(satPassList) - if (satPassList.isNotEmpty()) { - binding.layoutInfo.visibility = View.INVISIBLE - binding.recPassList.visibility = View.VISIBLE - } else { - binding.layoutInfo.visibility = View.VISIBLE - binding.recPassList.visibility = View.INVISIBLE - } + passesAdapter.setList(satPassList) setTimer() -// binding.refLayoutPassList.isRefreshing = false } is Result.InProgress -> { -// binding.refLayoutPassList.isRefreshing = true } } }) } private fun setupComponents() { - binding.recPassList.apply { + binding.passesRecycler.apply { layoutManager = LinearLayoutManager(mainActivity) - adapter = satPassAdapter + adapter = passesAdapter isVerticalScrollBarEnabled = false (itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false } - satPassAdapter.setList(satPassList) + passesAdapter.setList(satPassList) setTimer() -// binding.refLayoutPassList.setProgressBackgroundColorSchemeResource(R.color.themeAccent) -// binding.refLayoutPassList.setColorSchemeResources(R.color.backgroundDark) -// binding.refLayoutPassList.setOnRefreshListener { viewModel.calculatePasses() } - binding.toolbarFilter.setOnClickListener { + binding.passesFilter.setOnClickListener { showSatPassPrefsDialog(viewModel.getHoursAhead(), viewModel.getMinElevation()) } - binding.fabSatSelect.setOnClickListener { + binding.passesFab.setOnClickListener { lifecycleScope.launch { val list = viewModel.getAllEntries() as MutableList if (list.isEmpty()) { @@ -134,7 +122,7 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { } private fun showSatPassPrefsDialog(hoursAhead: Int, minEl: Double) { - val satPassPrefView = View.inflate(mainActivity, R.layout.dialog_pass_pref, null) + val satPassPrefView = View.inflate(mainActivity, R.layout.dialog_passes, null) val etHoursAhead = satPassPrefView.findViewById(R.id.pref_et_hoursAhead) val etMinEl = satPassPrefView.findViewById(R.id.pref_et_minEl) etHoursAhead.setText(hoursAhead.toString()) @@ -172,15 +160,15 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { } private fun showSelectSatDialog(tleMainList: MutableList) { - val listener = object : SatEntryDialogFragment.EntriesSubmitListener { + val listener = object : EntriesDialog.EntriesSubmitListener { override fun onEntriesSubmit(catNumList: MutableList) { viewModel.updateEntriesSelection(catNumList) } } - SatEntryDialogFragment(tleMainList).apply { + EntriesDialog(tleMainList).apply { setEntriesListener(listener) - show(mainActivity.supportFragmentManager, "SatEntryDialogFragment") + show(mainActivity.supportFragmentManager, "EntriesDialog") } } @@ -210,13 +198,13 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { } override fun onTick(millisUntilFinished: Long) { - binding.toolbarTimer.text = String.format( + binding.passesTimer.text = String.format( mainActivity.getString(R.string.pat_timer), TimeUnit.MILLISECONDS.toHours(millisUntilFinished) % 60, TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) % 60, TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) % 60 ) - satPassAdapter.updateRecycler() + passesAdapter.updateRecycler() } } } @@ -230,13 +218,13 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { } override fun onTick(millisUntilFinished: Long) { - binding.toolbarTimer.text = String.format( + binding.passesTimer.text = String.format( mainActivity.getString(R.string.pat_timer), TimeUnit.MILLISECONDS.toHours(millisUntilFinished) % 60, TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) % 60, TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) % 60 ) - satPassAdapter.updateRecycler() + passesAdapter.updateRecycler() } } } @@ -246,7 +234,7 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) { aosTimer.cancel() isTimerSet = false } - if (resetToNull) binding.toolbarTimer.text = + if (resetToNull) binding.passesTimer.text = String.format(getString(R.string.pat_timer), 0, 0, 0) } } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarViewFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarFragment.kt similarity index 84% rename from app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarViewFragment.kt rename to app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarFragment.kt index c188e4aa..1a5ca60d 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarViewFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarFragment.kt @@ -34,9 +34,9 @@ import com.rtbishop.look4sat.R import com.rtbishop.look4sat.dagger.ViewModelFactory import com.rtbishop.look4sat.data.Result import com.rtbishop.look4sat.data.SatPass -import com.rtbishop.look4sat.databinding.FragmentPolarViewBinding +import com.rtbishop.look4sat.databinding.FragmentPolarBinding import com.rtbishop.look4sat.ui.SharedViewModel -import com.rtbishop.look4sat.ui.adapters.TransmitterAdapter +import com.rtbishop.look4sat.ui.adapters.TransAdapter import com.rtbishop.look4sat.ui.views.PolarView import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -44,28 +44,28 @@ import java.util.* import javax.inject.Inject import kotlin.math.round -class PolarViewFragment : Fragment(R.layout.fragment_polar_view), SensorEventListener { +class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener { @Inject lateinit var modelFactory: ViewModelFactory private lateinit var mainActivity: FragmentActivity private lateinit var viewModel: SharedViewModel - private lateinit var binding: FragmentPolarViewBinding + private lateinit var binding: FragmentPolarBinding private lateinit var satPass: SatPass private lateinit var sensorManager: SensorManager private var polarView: PolarView? = null - private val args: PolarViewFragmentArgs by navArgs() - private val transmitterAdapter = TransmitterAdapter() + private val args: PolarFragmentArgs by navArgs() + private val transmitterAdapter = TransAdapter() private var magneticDeclination = 0f override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) mainActivity = requireActivity() - binding = FragmentPolarViewBinding.bind(view) + binding = FragmentPolarBinding.bind(view) (mainActivity.application as Look4SatApp).appComponent.inject(this) viewModel = ViewModelProvider(mainActivity, modelFactory).get(SharedViewModel::class.java) sensorManager = mainActivity.getSystemService(Context.SENSOR_SERVICE) as SensorManager - binding.recPolar.apply { + binding.recycler.apply { layoutManager = LinearLayoutManager(mainActivity) adapter = transmitterAdapter } @@ -111,7 +111,7 @@ class PolarViewFragment : Fragment(R.layout.fragment_polar_view), SensorEventLis val refreshRate = viewModel.getRefreshRate() satPass = result.data[args.satPassIndex] polarView = PolarView(mainActivity, satPass) - binding.framePolar.addView(polarView) + binding.frame.addView(polarView) observeTransmitters() refreshText(refreshRate) } @@ -124,11 +124,11 @@ class PolarViewFragment : Fragment(R.layout.fragment_polar_view), SensorEventLis transmitterAdapter.setPredictor(satPass.predictor) transmitterAdapter.setList(it) transmitterAdapter.notifyDataSetChanged() - binding.recPolar.visibility = View.VISIBLE - binding.tvPolarNoTrans.visibility = View.INVISIBLE + binding.recycler.visibility = View.VISIBLE + binding.noTransMsg.visibility = View.INVISIBLE } else { - binding.recPolar.visibility = View.INVISIBLE - binding.tvPolarNoTrans.visibility = View.VISIBLE + binding.recycler.visibility = View.INVISIBLE + binding.noTransMsg.visibility = View.VISIBLE } }) } @@ -164,9 +164,9 @@ class PolarViewFragment : Fragment(R.layout.fragment_polar_view), SensorEventLis val polarEl = mainActivity.getString(R.string.pat_elevation) val polarRng = mainActivity.getString(R.string.pat_distance) val polarAlt = mainActivity.getString(R.string.pat_altitude) - binding.tvPolarAz.text = String.format(polarAz, Math.toDegrees(satPos.azimuth)) - binding.tvPolarEl.text = String.format(polarEl, Math.toDegrees(satPos.elevation)) - binding.tvPolarRng.text = String.format(polarRng, satPos.range) - binding.tvPolarAlt.text = String.format(polarAlt, satPos.altitude) + binding.azimuth.text = String.format(polarAz, Math.toDegrees(satPos.azimuth)) + binding.elevation.text = String.format(polarEl, Math.toDegrees(satPos.elevation)) + binding.distance.text = String.format(polarRng, satPos.range) + binding.altitude.text = String.format(polarAlt, satPos.altitude) } } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PreferencesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/ui/fragments/PreferencesFragment.kt rename to app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt index c40ff994..68797383 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PreferencesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt @@ -27,7 +27,7 @@ import androidx.preference.PreferenceFragmentCompat import com.rtbishop.look4sat.R import com.rtbishop.look4sat.utility.Extensions.snack -class PreferencesFragment : PreferenceFragmentCompat(), +class PrefsFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { private lateinit var keyLat: String diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/TleSourcesDialogFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/SourcesDialog.kt similarity index 86% rename from app/src/main/java/com/rtbishop/look4sat/ui/fragments/TleSourcesDialogFragment.kt rename to app/src/main/java/com/rtbishop/look4sat/ui/fragments/SourcesDialog.kt index 62efa876..ab815df0 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/TleSourcesDialogFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/SourcesDialog.kt @@ -26,18 +26,18 @@ import android.view.Window import androidx.appcompat.app.AppCompatDialogFragment import androidx.recyclerview.widget.LinearLayoutManager import com.rtbishop.look4sat.data.TleSource -import com.rtbishop.look4sat.databinding.DialogTleSourcesBinding -import com.rtbishop.look4sat.ui.adapters.TleSourcesAdapter +import com.rtbishop.look4sat.databinding.DialogSourcesBinding +import com.rtbishop.look4sat.ui.adapters.SourcesAdapter -class TleSourcesDialogFragment(sources: List) : +class SourcesDialog(sources: List) : AppCompatDialogFragment() { private lateinit var sourcesListener: SourcesSubmitListener private val emptySource = TleSource("") - private val sourcesAdapter = TleSourcesAdapter(sources.toMutableList()) + private val sourcesAdapter = SourcesAdapter(sources.toMutableList()) override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val binding = DialogTleSourcesBinding.inflate(requireActivity().layoutInflater) + val binding = DialogSourcesBinding.inflate(requireActivity().layoutInflater) val tleSourcesDialog = Dialog(requireActivity()).apply { window?.requestFeature(Window.FEATURE_NO_TITLE) setContentView(binding.root) @@ -70,7 +70,7 @@ class TleSourcesDialogFragment(sources: List) : return tleSourcesDialog } - fun setSourcesListener(listener: SourcesSubmitListener): TleSourcesDialogFragment { + fun setSourcesListener(listener: SourcesSubmitListener): SourcesDialog { sourcesListener = listener return this } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/views/MapView.kt b/app/src/main/java/com/rtbishop/look4sat/ui/views/MapView.kt deleted file mode 100644 index ce241036..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/ui/views/MapView.kt +++ /dev/null @@ -1,171 +0,0 @@ -package com.rtbishop.look4sat.ui.views - -import android.annotation.SuppressLint -import android.content.Context -import android.graphics.* -import android.view.View -import androidx.core.content.ContextCompat -import com.github.amsacode.predict4java.GroundStationPosition -import com.github.amsacode.predict4java.Position -import com.github.amsacode.predict4java.SatPos -import com.github.amsacode.predict4java.TLE -import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.data.SatPass -import java.util.* -import kotlin.math.abs - -class MapView(context: Context) : View(context) { - - constructor(context: Context, groundStationPosition: GroundStationPosition) : this(context) { - gsp = groundStationPosition - } - - private lateinit var passList: List - private lateinit var gsp: GroundStationPosition - private lateinit var selectedSat: TLE - private val scale = resources.displayMetrics.density - private val groundTrackPaint = Paint().apply { - isAntiAlias = true - color = ContextCompat.getColor(context, R.color.satTrack) - style = Paint.Style.STROKE - strokeWidth = scale - } - private val satPaintPrim = Paint().apply { - isAntiAlias = true - color = ContextCompat.getColor(context, R.color.satPrimary) - style = Paint.Style.STROKE - strokeWidth = scale - } - private val satPaintSec = Paint().apply { - isAntiAlias = true - color = ContextCompat.getColor(context, R.color.satSecondary) - style = Paint.Style.STROKE - strokeWidth = scale - } - private val txtPaint = Paint().apply { - isAntiAlias = true - color = ContextCompat.getColor(context, R.color.satPrimary) - style = Paint.Style.FILL - strokeWidth = scale - textSize = 16f - setShadowLayer(2f, 2f, 2f, Color.BLACK) - } - private val outlinePaint = Paint().apply { - isAntiAlias = true - color = Color.BLACK - style = Paint.Style.FILL_AND_STROKE - strokeWidth = scale - textSize = 16f - } - private val rect = Rect() - private var checked = 0 - private var degLon = 0f - private var degLat = 0f - - fun setList(satPassList: List) { - passList = satPassList - } - - fun setChecked(item: Int) { - checked = item - selectedSat = passList[checked].tle - } - - @SuppressLint("DrawAllocation") - override fun onDraw(canvas: Canvas) { - degLon = width / 360f - degLat = height / 180f - canvas.translate(width / 2f, height / 2f) - drawHomeLoc(canvas) - val currentTime = Date(System.currentTimeMillis()) - val orbitalPeriod = (24 * 60 / selectedSat.meanmo).toInt() - val predictor = passList[checked].predictor - val positions = predictor.getPositions(currentTime, 60, 0, orbitalPeriod * 3) - drawGroundTrack(canvas, positions) - passList.forEach { satPass -> drawSat(canvas, satPass, currentTime, satPaintSec) } - drawSat(canvas, passList[checked], currentTime, satPaintPrim) - } - - private fun drawHomeLoc(canvas: Canvas) { - val lon = gsp.longitude.toFloat() - val lat = gsp.latitude.toFloat() * -1 - val cx = lon * degLon - val cy = lat * degLat - val gspName = context.getString(R.string.map_gsp) - txtPaint.getTextBounds(gspName, 0, gspName.length, rect) - canvas.drawCircle(cx, cy, scale * 2, txtPaint) - canvas.drawText(gspName, cx - rect.width() / 2, cy - txtPaint.textSize, outlinePaint) - canvas.drawText(gspName, cx - rect.width() / 2, cy - txtPaint.textSize, txtPaint) - - } - - private fun drawGroundTrack(canvas: Canvas, list: List) { - val path = Path() - var lon: Float - var lat: Float - var lastLon = 181f - - list.withIndex().forEach { (index, satPos) -> - lon = Math.toDegrees(satPos.longitude).toFloat() - lat = Math.toDegrees(satPos.latitude).toFloat() * -1 - - if (lon > 180f) lon -= 360f - - lon *= degLon - lat *= degLat - - if (index == 0 || abs(lon - lastLon) > 180) path.moveTo(lon, lat) - else path.lineTo(lon, lat) - - lastLon = lon - } - canvas.drawPath(path, groundTrackPaint) - } - - private fun drawSat(canvas: Canvas, satPass: SatPass, date: Date, paint: Paint) { - val tle = satPass.tle - val predictor = satPass.predictor - val satPosNow = predictor.getSatPos(date) - val footprintPosList = satPosNow.rangeCircle - drawFootprint(canvas, footprintPosList, paint) - drawName(canvas, satPosNow, tle.name) - } - - private fun drawFootprint(canvas: Canvas, list: List, paint: Paint) { - val path = Path() - var lon: Float - var lat: Float - var lastLon = 181f - - list.withIndex().forEach { (index, position) -> - lon = position.lon.toFloat() - lat = position.lat.toFloat() * -1 - - if (lon > 180f) lon -= 360f - - lon *= degLon - lat *= degLat - - if (index == 0 || abs(lon - lastLon) > 180) path.moveTo(lon, lat) - else path.lineTo(lon, lat) - - lastLon = lon - } - canvas.drawPath(path, paint) - } - - private fun drawName(canvas: Canvas, position: SatPos, name: String) { - var lon = Math.toDegrees(position.longitude).toFloat() - val lat = Math.toDegrees(position.latitude).toFloat() * -1 - - if (lon > 180f) lon -= 360f - - val cx = lon * degLon - val cy = lat * degLat - - canvas.drawCircle(cx, cy, scale * 2, txtPaint) - txtPaint.getTextBounds(name, 0, name.length, rect) - canvas.drawText(name, cx - rect.width() / 2, cy - txtPaint.textSize, outlinePaint) - canvas.drawText(name, cx - rect.width() / 2, cy - txtPaint.textSize, txtPaint) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/utility/PassPredictor.kt b/app/src/main/java/com/rtbishop/look4sat/utility/PassPredictor.kt index e41f2c1e..b8a800ff 100644 --- a/app/src/main/java/com/rtbishop/look4sat/utility/PassPredictor.kt +++ b/app/src/main/java/com/rtbishop/look4sat/utility/PassPredictor.kt @@ -42,31 +42,17 @@ import java.util.* class PassPredictor(private val tle: TLE, private val qth: GroundStationPosition) { private val sat: Satellite = SatelliteFactory.createSatellite(tle) - private val south = "south" - private val north = "north" - private val deadSpotNone = "none" private val speedOfLight = 2.99792458E8 - private val twoPi = Math.PI * 2.0 private val timeZone: TimeZone = TimeZone.getTimeZone("UTC") private var iterationCount = 0 fun getDownlinkFreq(freq: Long, date: Date): Long { - val cal = Calendar.getInstance(timeZone).apply { - clear() - timeInMillis = date.time - } - val satPos = getSatPos(cal.time) - val rangeRate = satPos.rangeRate + val rangeRate = getSatPos(date).rangeRate return (freq.toDouble() * (speedOfLight - rangeRate * 1000.0) / speedOfLight).toLong() } fun getUplinkFreq(freq: Long, date: Date): Long { - val cal = Calendar.getInstance(timeZone).apply { - clear() - timeInMillis = date.time - } - val satPos = getSatPos(cal.time) - val rangeRate = satPos.rangeRate + val rangeRate = getSatPos(date).rangeRate return (freq.toDouble() * (speedOfLight + rangeRate * 1000.0) / speedOfLight).toLong() } @@ -155,7 +141,7 @@ class PassPredictor(private val tle: TLE, private val qth: GroundStationPosition var maxElevation = 0.0 var elevation: Double var prevPos: SatPos - var polePassed = deadSpotNone + var polePassed = "none" // get the current position val cal = Calendar.getInstance(timeZone).apply { @@ -206,7 +192,7 @@ class PassPredictor(private val tle: TLE, private val qth: GroundStationPosition do { satPos = getPosition(cal, 30) val currPolePassed = getPolePassed(prevPos, satPos) - if (currPolePassed != deadSpotNone) { + if (currPolePassed != "none") { polePassed = currPolePassed } elevation = satPos.elevation @@ -242,23 +228,17 @@ class PassPredictor(private val tle: TLE, private val qth: GroundStationPosition } private fun getPolePassed(prevPos: SatPos, satPos: SatPos): String { - var polePassed = deadSpotNone - val az1 = prevPos.azimuth / twoPi * 360.0 - val az2 = satPos.azimuth / twoPi * 360.0 + var polePassed = "none" + val north = "north" + val south = "south" + val az1 = Math.toDegrees(prevPos.azimuth) + val az2 = Math.toDegrees(satPos.azimuth) if (az1 > az2) { - // we may be moving from 350 or greater through north if (az1 > 350 && az2 < 10) polePassed = north - else { - // we may be moving from 190 or greater through south - if (az1 > 180 && az2 < 180) polePassed = south - } + else if (az1 > 180 && az2 < 180) polePassed = south } else { - // we may be moving from 10 or less through north if (az1 < 10 && az2 > 350) polePassed = north - else { - // we may be moving from 170 or more through south - if (az1 < 180 && az2 > 180) polePassed = south - } + else if (az1 < 180 && az2 > 180) polePassed = south } return polePassed } diff --git a/app/src/main/res/drawable-nodpi/splash_front.webp b/app/src/main/res/drawable-nodpi/splash_front.webp deleted file mode 100644 index c694aa09..00000000 Binary files a/app/src/main/res/drawable-nodpi/splash_front.webp and /dev/null differ diff --git a/app/src/main/res/drawable/ic_add.xml b/app/src/main/res/drawable/ic_add.xml index 88076db6..185e6535 100644 --- a/app/src/main/res/drawable/ic_add.xml +++ b/app/src/main/res/drawable/ic_add.xml @@ -1,9 +1,9 @@ + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_arrow.xml b/app/src/main/res/drawable/ic_arrow.xml index 48ad72a9..221e9ac9 100644 --- a/app/src/main/res/drawable/ic_arrow.xml +++ b/app/src/main/res/drawable/ic_arrow.xml @@ -20,9 +20,9 @@ + android:viewportWidth="24" + android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_arrow_swipe.xml b/app/src/main/res/drawable/ic_arrow_swipe.xml deleted file mode 100644 index b3a8073f..00000000 --- a/app/src/main/res/drawable/ic_arrow_swipe.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_doppler.xml b/app/src/main/res/drawable/ic_doppler.xml deleted file mode 100644 index dd42f45c..00000000 --- a/app/src/main/res/drawable/ic_doppler.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/ic_file_open.xml b/app/src/main/res/drawable/ic_file_open.xml deleted file mode 100644 index fa95c65b..00000000 --- a/app/src/main/res/drawable/ic_file_open.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_filter.xml b/app/src/main/res/drawable/ic_filter.xml deleted file mode 100644 index b3c0e18a..00000000 --- a/app/src/main/res/drawable/ic_filter.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_goto_github.xml b/app/src/main/res/drawable/ic_github.xml similarity index 95% rename from app/src/main/res/drawable/ic_goto_github.xml rename to app/src/main/res/drawable/ic_github.xml index 257a083f..72c1d085 100644 --- a/app/src/main/res/drawable/ic_goto_github.xml +++ b/app/src/main/res/drawable/ic_github.xml @@ -19,12 +19,12 @@ diff --git a/app/src/main/res/drawable/ic_map_pos.xml b/app/src/main/res/drawable/ic_map_pos.xml index f6d41062..23dfe20f 100644 --- a/app/src/main/res/drawable/ic_map_pos.xml +++ b/app/src/main/res/drawable/ic_map_pos.xml @@ -1,7 +1,6 @@ diff --git a/app/src/main/res/drawable/ic_list.xml b/app/src/main/res/drawable/ic_menu_passes.xml similarity index 85% rename from app/src/main/res/drawable/ic_list.xml rename to app/src/main/res/drawable/ic_menu_passes.xml index 9d1961ed..4a2250f1 100644 --- a/app/src/main/res/drawable/ic_list.xml +++ b/app/src/main/res/drawable/ic_menu_passes.xml @@ -1,10 +1,9 @@ diff --git a/app/src/main/res/drawable/ic_sputnik.xml b/app/src/main/res/drawable/ic_menu_sat.xml similarity index 57% rename from app/src/main/res/drawable/ic_sputnik.xml rename to app/src/main/res/drawable/ic_menu_sat.xml index 61a2cedb..66d61d98 100644 --- a/app/src/main/res/drawable/ic_sputnik.xml +++ b/app/src/main/res/drawable/ic_menu_sat.xml @@ -1,33 +1,14 @@ - - diff --git a/app/src/main/res/drawable/ic_pass_active.xml b/app/src/main/res/drawable/ic_pass_active.xml index 8c9b5c22..b8579448 100644 --- a/app/src/main/res/drawable/ic_pass_active.xml +++ b/app/src/main/res/drawable/ic_pass_active.xml @@ -20,9 +20,9 @@ + android:viewportWidth="24" + android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_pass_inactive.xml b/app/src/main/res/drawable/ic_pass_inactive.xml index 5c059d76..e8d43b7c 100644 --- a/app/src/main/res/drawable/ic_pass_inactive.xml +++ b/app/src/main/res/drawable/ic_pass_inactive.xml @@ -20,9 +20,9 @@ + android:viewportWidth="24" + android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_prefs.xml b/app/src/main/res/drawable/ic_prefs.xml new file mode 100644 index 00000000..58652c58 --- /dev/null +++ b/app/src/main/res/drawable/ic_prefs.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_proceed.xml b/app/src/main/res/drawable/ic_proceed.xml new file mode 100644 index 00000000..0e761d37 --- /dev/null +++ b/app/src/main/res/drawable/ic_proceed.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 00000000..92e942ad --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sat_asc_left.xml b/app/src/main/res/drawable/ic_sat_asc_left.xml deleted file mode 100644 index edced987..00000000 --- a/app/src/main/res/drawable/ic_sat_asc_left.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_select_all.xml b/app/src/main/res/drawable/ic_select_all.xml new file mode 100644 index 00000000..01948a0e --- /dev/null +++ b/app/src/main/res/drawable/ic_select_all.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml index 7cae9d70..04c3c2ef 100644 --- a/app/src/main/res/drawable/ic_settings.xml +++ b/app/src/main/res/drawable/ic_settings.xml @@ -18,11 +18,11 @@ --> diff --git a/app/src/main/res/drawable/ic_trans.xml b/app/src/main/res/drawable/ic_trans.xml index 981d3800..da8d3d54 100644 --- a/app/src/main/res/drawable/ic_trans.xml +++ b/app/src/main/res/drawable/ic_trans.xml @@ -1,31 +1,9 @@ - - + android:viewportWidth="24" + android:viewportHeight="24"> - + android:fillColor="@color/themeAccent" + android:pathData="M12,11c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM18,13c0,-3.31 -2.69,-6 -6,-6s-6,2.69 -6,6c0,2.22 1.21,4.15 3,5.19l1,-1.74c-1.19,-0.7 -2,-1.97 -2,-3.45 0,-2.21 1.79,-4 4,-4s4,1.79 4,4c0,1.48 -0.81,2.75 -2,3.45l1,1.74c1.79,-1.04 3,-2.97 3,-5.19zM12,3C6.48,3 2,7.48 2,13c0,3.7 2.01,6.92 4.99,8.65l1,-1.73C5.61,18.53 4,15.96 4,13c0,-4.42 3.58,-8 8,-8s8,3.58 8,8c0,2.96 -1.61,5.53 -4,6.92l1,1.73c2.99,-1.73 5,-4.95 5,-8.65 0,-5.52 -4.48,-10 -10,-10z" /> diff --git a/app/src/main/res/drawable/ic_trans_doppler.xml b/app/src/main/res/drawable/ic_trans_doppler.xml new file mode 100644 index 00000000..536164e4 --- /dev/null +++ b/app/src/main/res/drawable/ic_trans_doppler.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_update_file.xml b/app/src/main/res/drawable/ic_update_file.xml new file mode 100644 index 00000000..0e122f79 --- /dev/null +++ b/app/src/main/res/drawable/ic_update_file.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_update_web.xml b/app/src/main/res/drawable/ic_update_web.xml new file mode 100644 index 00000000..f6bfc51b --- /dev/null +++ b/app/src/main/res/drawable/ic_update_web.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_update_tle.xml b/app/src/main/res/drawable/ic_world.xml similarity index 89% rename from app/src/main/res/drawable/ic_update_tle.xml rename to app/src/main/res/drawable/ic_world.xml index fc19cf9e..f8719a00 100644 --- a/app/src/main/res/drawable/ic_update_tle.xml +++ b/app/src/main/res/drawable/ic_world.xml @@ -18,11 +18,11 @@ --> + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_world_map.xml b/app/src/main/res/drawable/ic_world_map.xml deleted file mode 100644 index 87f367c0..00000000 --- a/app/src/main/res/drawable/ic_world_map.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/splash_drawable.xml b/app/src/main/res/drawable/splash_drawable.xml deleted file mode 100644 index 34e5c42b..00000000 --- a/app/src/main/res/drawable/splash_drawable.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 386dec1d..25a95f28 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -4,23 +4,17 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - + app:layout_constraintTop_toTopOf="parent" + app:navGraph="@navigation/nav_graph" /> + app:layout_constraintStart_toEndOf="@+id/title_img" + app:layout_constraintTop_toTopOf="@+id/title_img" /> + app:layout_constraintTop_toBottomOf="@+id/title" /> + app:layout_constraintTop_toBottomOf="@+id/version" /> + app:layout_constraintEnd_toEndOf="@+id/subtitle" + app:layout_constraintStart_toStartOf="@+id/subtitle" + app:layout_constraintTop_toBottomOf="@+id/subtitle" /> + app:layout_constraintTop_toBottomOf="@+id/thanks" /> diff --git a/app/src/main/res/layout/fragment_entries.xml b/app/src/main/res/layout/fragment_entries.xml new file mode 100644 index 00000000..4b7799a8 --- /dev/null +++ b/app/src/main/res/layout/fragment_entries.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_map_osm.xml b/app/src/main/res/layout/fragment_map.xml similarity index 88% rename from app/src/main/res/layout/fragment_map_osm.xml rename to app/src/main/res/layout/fragment_map.xml index 0eba8675..5f85bb10 100644 --- a/app/src/main/res/layout/fragment_map_osm.xml +++ b/app/src/main/res/layout/fragment_map.xml @@ -2,13 +2,12 @@ + tools:context=".ui.fragments.MapFragment"> + app:layout_constraintTop_toBottomOf="@+id/id_name" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_passes.xml b/app/src/main/res/layout/fragment_passes.xml new file mode 100644 index 00000000..0385bd31 --- /dev/null +++ b/app/src/main/res/layout/fragment_passes.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_polar_view.xml b/app/src/main/res/layout/fragment_polar.xml similarity index 74% rename from app/src/main/res/layout/fragment_polar_view.xml rename to app/src/main/res/layout/fragment_polar.xml index 7c19bf64..f3b77b3d 100644 --- a/app/src/main/res/layout/fragment_polar_view.xml +++ b/app/src/main/res/layout/fragment_polar.xml @@ -22,10 +22,10 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.fragments.PolarViewFragment"> + tools:context=".ui.fragments.PolarFragment"> + app:layout_constraintStart_toStartOf="@+id/frame" + app:layout_constraintTop_toTopOf="@+id/frame" /> + app:layout_constraintEnd_toEndOf="@+id/frame" + app:layout_constraintTop_toTopOf="@+id/frame" /> + app:layout_constraintBottom_toBottomOf="@+id/frame" + app:layout_constraintStart_toStartOf="@+id/frame" /> + app:layout_constraintBottom_toBottomOf="@+id/frame" + app:layout_constraintEnd_toEndOf="@+id/frame" /> + app:layout_constraintTop_toBottomOf="@+id/frame" /> + app:layout_constraintTop_toBottomOf="@+id/frame" /> diff --git a/app/src/main/res/layout/item_transmitter.xml b/app/src/main/res/layout/item_trans.xml similarity index 98% rename from app/src/main/res/layout/item_transmitter.xml rename to app/src/main/res/layout/item_trans.xml index 9c1ef25e..145ed4a2 100644 --- a/app/src/main/res/layout/item_transmitter.xml +++ b/app/src/main/res/layout/item_trans.xml @@ -113,7 +113,6 @@ android:layout_marginStart="4dp" android:layout_marginTop="4dp" android:contentDescription="@string/placeholder" - android:rotation="90" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/ic_trans" /> @@ -161,7 +160,7 @@ app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/trans_downlink_doppler" - app:srcCompat="@drawable/ic_doppler" /> + app:srcCompat="@drawable/ic_trans_doppler" /> + app:srcCompat="@drawable/ic_trans_doppler" /> diff --git a/app/src/main/res/menu/nav_menu.xml b/app/src/main/res/menu/nav_menu.xml index ccc1e428..8ca6577e 100644 --- a/app/src/main/res/menu/nav_menu.xml +++ b/app/src/main/res/menu/nav_menu.xml @@ -18,23 +18,23 @@ --> \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 22f155dd..021b216d 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -21,20 +21,20 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mobile_navigation" - app:startDestination="@id/nav_passes"> + app:startDestination="@id/nav_entries"> + android:id="@+id/nav_entries" + android:name="com.rtbishop.look4sat.ui.fragments.EntriesFragment" + tools:layout="@layout/fragment_entries" /> + android:name="com.rtbishop.look4sat.ui.fragments.PassesFragment" + tools:layout="@layout/fragment_passes"> + android:id="@+id/nav_polar" + android:name="com.rtbishop.look4sat.ui.fragments.PolarFragment" + tools:layout="@layout/fragment_polar"> + android:id="@+id/nav_map" + android:name="com.rtbishop.look4sat.ui.fragments.MapFragment" + tools:layout="@layout/fragment_map" /> + android:id="@+id/nav_prefs" + android:name="com.rtbishop.look4sat.ui.fragments.PrefsFragment" /> - diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index db5459c8..35420d6e 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -158,4 +158,5 @@ СТЦ Источник TLE Используйте протокол HTTPS + Импорт спутников diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index df1685e1..8bf2035b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -180,4 +180,5 @@ Please use HTTPS URLs only Placeholder Wikimedia maps | Map data © OpenStreetMap contributors + Import satellite data diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 7dc78ecd..e1fb26d5 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -33,56 +33,6 @@ @android:color/transparent - - - - - - - - - - - - - - - -