From bbb89b7e6bd4c29fda7309ed436e6c5f8b57af67 Mon Sep 17 00:00:00 2001 From: Arty Bishop <bishop.arty@gmail.com> Date: Sun, 7 Aug 2022 13:33:21 +0100 Subject: [PATCH] v3.1.1 - R4UAB source, minor fixes, libs update --- app/build.gradle | 5 +- .../look4sat/framework/SettingsManager.kt | 10 --- .../passesScreen/PassesViewModel.kt | 2 +- .../settingsScreen/SettingsViewModel.kt | 2 +- .../settingsScreen/SourcesAdapter.kt | 88 ------------------- .../settingsScreen/SourcesDialog.kt | 76 ---------------- app/src/main/res/navigation/nav_graph.xml | 11 --- .../look4sat/domain/IDataRepository.kt | 4 +- .../look4sat/domain/ISettingsManager.kt | 12 +-- .../look4sat/domain/data/DataRepository.kt | 35 +------- build.gradle | 18 ++-- .../metadata/android/en-US/changelogs/311.txt | 5 ++ .../android/en-US/whatsnew/whatsnew-en-US | 11 ++- gradle/wrapper/gradle-wrapper.properties | 4 +- 14 files changed, 29 insertions(+), 254 deletions(-) delete mode 100644 app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SourcesAdapter.kt delete mode 100644 app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SourcesDialog.kt create mode 100644 fastlane/metadata/android/en-US/changelogs/311.txt diff --git a/app/build.gradle b/app/build.gradle index 7941dc20..1fdb4efb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,9 +14,8 @@ android { applicationId "com.rtbishop.look4sat" minSdk 21 targetSdk 31 - versionCode 310 - versionName '3.1.0' - resConfigs 'en,ru,zh_CN' + versionCode 311 + versionName '3.1.1' testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/rtbishop/look4sat/framework/SettingsManager.kt b/app/src/main/java/com/rtbishop/look4sat/framework/SettingsManager.kt index ef79e7a5..68c6a068 100644 --- a/app/src/main/java/com/rtbishop/look4sat/framework/SettingsManager.kt +++ b/app/src/main/java/com/rtbishop/look4sat/framework/SettingsManager.kt @@ -29,7 +29,6 @@ class SettingsManager @Inject constructor(private val prefs: SharedPreferences) companion object { const val keyFirstEverLaunch = "isFirstEverLaunch" - const val keyDataSources = "dataSources" const val keyModes = "satModes" const val keyCompass = "compass" const val keyRadarSweep = "radarSweep" @@ -203,15 +202,6 @@ class SettingsManager @Inject constructor(private val prefs: SharedPreferences) prefs.edit { putString(keyBTFormat, value) } } - override fun loadDataSources(): List<String> { - val sourcesList = prefs.getStringSet(keyDataSources, null)?.toList() - return if (sourcesList.isNullOrEmpty()) defaultSources else sourcesList.sortedDescending() - } - - override fun saveDataSources(sources: List<String>) { - if (sources.isNotEmpty()) prefs.edit { putStringSet(keyDataSources, sources.toSet()) } - } - private fun SharedPreferences.getDouble(key: String, default: Double): Double { return Double.fromBits(getLong(key, default.toRawBits())) } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt index 449358cc..16e97f99 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt @@ -42,7 +42,7 @@ class PassesViewModel @Inject constructor( init { viewModelScope.launch { if (!settings.isFirstEverLaunchDone()) { - repository.updateFromWebNew() + repository.updateFromWeb() settings.setFirstEverLaunchDone() } } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsViewModel.kt index 6226e695..fb3e74d2 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SettingsViewModel.kt @@ -45,7 +45,7 @@ class SettingsViewModel @Inject constructor( fun updateDataFromWeb() { // settings.saveDataSources(sources) // repository.updateFromWeb(sources) - repository.updateFromWebNew() + repository.updateFromWeb() } fun clearData() { diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SourcesAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SourcesAdapter.kt deleted file mode 100644 index 9123653f..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SourcesAdapter.kt +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Look4Sat. Amateur radio satellite tracker and pass predictor. - * Copyright (C) 2019-2022 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.presentation.settingsScreen - -import android.view.LayoutInflater -import android.view.ViewGroup -import androidx.core.widget.doOnTextChanged -import androidx.recyclerview.widget.AsyncListDiffer -import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.RecyclerView -import com.rtbishop.look4sat.databinding.ItemSourceBinding -import com.rtbishop.look4sat.framework.model.DataSource - -class SourcesAdapter(private val clickListener: SourcesClickListener) : - RecyclerView.Adapter<SourcesAdapter.SourceHolder>() { - - private val diffCallback = object : DiffUtil.ItemCallback<DataSource>() { - override fun areItemsTheSame(oldItem: DataSource, newItem: DataSource): Boolean { - return oldItem.url == newItem.url - } - - override fun areContentsTheSame(oldItem: DataSource, newItem: DataSource): Boolean { - return oldItem.url == newItem.url - } - } - private val differ = AsyncListDiffer(this, diffCallback) - private val httpsString = "https://" - - fun getSources() = differ.currentList.filter { source -> source.url.contains(httpsString) } - - fun addSource() { - submitList((getSources() as MutableList).apply { add(DataSource(httpsString)) }) - } - - fun removeSource(source: DataSource) { - submitList((getSources() as MutableList).apply { remove(source) }) - } - - fun submitList(items: List<DataSource>) = differ.submitList(items) - - override fun getItemCount(): Int = differ.currentList.size - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SourceHolder { - return SourceHolder.from(parent) - } - - override fun onBindViewHolder(holder: SourceHolder, position: Int) { - holder.bind(differ.currentList[position], clickListener) - } - - class SourceHolder(private val binding: ItemSourceBinding) : - RecyclerView.ViewHolder(binding.root) { - - fun bind(source: DataSource, listener: SourcesClickListener) { - binding.run { - sourceText.setText(source.url) - sourceText.doOnTextChanged { text, _, _, _ -> source.url = text.toString() } - sourceInput.setEndIconOnClickListener { listener.removeSource(source) } - } - } - - companion object { - fun from(parent: ViewGroup): SourceHolder { - val inflater = LayoutInflater.from(parent.context) - return SourceHolder(ItemSourceBinding.inflate(inflater, parent, false)) - } - } - } - - interface SourcesClickListener { - fun removeSource(source: DataSource) - } -} diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SourcesDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SourcesDialog.kt deleted file mode 100644 index e153c673..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/SourcesDialog.kt +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Look4Sat. Amateur radio satellite tracker and pass predictor. - * Copyright (C) 2019-2022 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.presentation.settingsScreen - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.WindowManager -import androidx.appcompat.app.AppCompatDialogFragment -import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.LinearLayoutManager -import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.databinding.DialogSourcesBinding -import com.rtbishop.look4sat.domain.ISettingsManager -import com.rtbishop.look4sat.framework.model.DataSource -import com.rtbishop.look4sat.presentation.setNavResult -import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject - -@AndroidEntryPoint -class SourcesDialog : AppCompatDialogFragment(), SourcesAdapter.SourcesClickListener { - - @Inject - lateinit var settings: ISettingsManager - private lateinit var binding: DialogSourcesBinding - private lateinit var sourcesAdapter: SourcesAdapter - - override fun onCreateView(inflater: LayoutInflater, group: ViewGroup?, state: Bundle?): View { - binding = DialogSourcesBinding.inflate(inflater, group, false) - return binding.root - } - - override fun onViewCreated(view: View, state: Bundle?) { - super.onViewCreated(view, state) - dialog?.window?.setBackgroundDrawableResource(R.color.transparent) - dialog?.window?.setLayout( - (resources.displayMetrics.widthPixels * 0.94).toInt(), - WindowManager.LayoutParams.WRAP_CONTENT - ) - lifecycleScope.launchWhenResumed { - val sources = settings.loadDataSources().map { url -> DataSource(url) } - val layoutManager = LinearLayoutManager(requireContext()) - sourcesAdapter = SourcesAdapter(this@SourcesDialog).apply { submitList(sources) } - binding.run { - sourcesRecycler.apply { - this.adapter = sourcesAdapter - this.layoutManager = layoutManager - } - sourcesBtnAdd.setOnClickListener { sourcesAdapter.addSource() } - sourcesBtnNeg.setOnClickListener { dismiss() } - sourcesBtnPos.setOnClickListener { - setNavResult("sources", sourcesAdapter.getSources().map { item -> item.url }) - dismiss() - } - } - } - } - - override fun removeSource(source: DataSource) = sourcesAdapter.removeSource(source) -} diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index bce3cb07..872cc852 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -54,13 +54,6 @@ android:id="@+id/nav_settings" android:name="com.rtbishop.look4sat.presentation.settingsScreen.SettingsFragment" tools:layout="@layout/fragment_settings"> - <action - android:id="@+id/settings_to_sources" - app:destination="@id/nav_sources" - app:enterAnim="@anim/nav_default_enter_anim" - app:exitAnim="@anim/nav_default_exit_anim" - app:popEnterAnim="@anim/nav_default_pop_enter_anim" - app:popExitAnim="@anim/nav_default_pop_exit_anim" /> </fragment> <dialog android:id="@+id/nav_modes" @@ -70,10 +63,6 @@ android:id="@+id/nav_filter" android:name="com.rtbishop.look4sat.presentation.passesScreen.FilterDialog" tools:layout="@layout/dialog_filter" /> - <dialog - android:id="@+id/nav_sources" - android:name="com.rtbishop.look4sat.presentation.settingsScreen.SourcesDialog" - tools:layout="@layout/dialog_sources" /> <dialog android:id="@+id/nav_position" android:name="com.rtbishop.look4sat.presentation.settingsScreen.PositionDialog" diff --git a/base/src/main/java/com/rtbishop/look4sat/domain/IDataRepository.kt b/base/src/main/java/com/rtbishop/look4sat/domain/IDataRepository.kt index fe356c44..caacbcae 100644 --- a/base/src/main/java/com/rtbishop/look4sat/domain/IDataRepository.kt +++ b/base/src/main/java/com/rtbishop/look4sat/domain/IDataRepository.kt @@ -40,9 +40,7 @@ interface IDataRepository { fun updateFromFile(uri: String) - fun updateFromWeb(urls: List<String>) - - fun updateFromWebNew() + fun updateFromWeb() fun setUpdateStateHandled() diff --git a/base/src/main/java/com/rtbishop/look4sat/domain/ISettingsManager.kt b/base/src/main/java/com/rtbishop/look4sat/domain/ISettingsManager.kt index b555acc1..c0aa875e 100644 --- a/base/src/main/java/com/rtbishop/look4sat/domain/ISettingsManager.kt +++ b/base/src/main/java/com/rtbishop/look4sat/domain/ISettingsManager.kt @@ -21,13 +21,6 @@ import com.rtbishop.look4sat.domain.predict.GeoPos interface ISettingsManager { - val defaultSources: List<String> - get() = listOf( - "https://www.prismnet.com/~mmccants/tles/inttles.zip", - "https://www.prismnet.com/~mmccants/tles/classfd.zip", - "https://celestrak.com/NORAD/elements/gp.php?GROUP=active&FORMAT=csv", - "https://amsat.org/tle/current/nasabare.txt" - ) val sourcesMap: Map<String, String> get() = mapOf( "All" to "https://celestrak.com/NORAD/elements/gp.php?GROUP=active&FORMAT=csv", @@ -47,6 +40,7 @@ interface ISettingsManager { "New" to "https://celestrak.com/NORAD/elements/gp.php?GROUP=last-30-days&FORMAT=csv", "OneWeb" to "https://celestrak.com/NORAD/elements/gp.php?GROUP=oneweb&FORMAT=csv", "Orbcomm" to "https://celestrak.com/NORAD/elements/gp.php?GROUP=orbcomm&FORMAT=csv", + "R4UAB" to "https://r4uab.ru/satonline.txt", "Resource" to "https://celestrak.com/NORAD/elements/gp.php?GROUP=resource&FORMAT=csv", "SatNOGS" to "https://celestrak.com/NORAD/elements/gp.php?GROUP=satnogs&FORMAT=csv", "Science" to "https://celestrak.com/NORAD/elements/gp.php?GROUP=science&FORMAT=csv", @@ -128,8 +122,4 @@ interface ISettingsManager { fun getBTFormat(): String fun setBTFormat(value: String) - - fun loadDataSources(): List<String> - - fun saveDataSources(sources: List<String>) } diff --git a/base/src/main/java/com/rtbishop/look4sat/domain/data/DataRepository.kt b/base/src/main/java/com/rtbishop/look4sat/domain/data/DataRepository.kt index cf358659..d12d2961 100644 --- a/base/src/main/java/com/rtbishop/look4sat/domain/data/DataRepository.kt +++ b/base/src/main/java/com/rtbishop/look4sat/domain/data/DataRepository.kt @@ -66,38 +66,7 @@ class DataRepository( } } - override fun updateFromWeb(urls: List<String>) { - _updateState.value = DataState.Loading - repositoryScope.launch(exceptionHandler) { - val streams = mutableListOf<InputStream>() - val entries = mutableListOf<SatEntry>() - val jobs = urls.associateWith { url -> async { remoteSource.getDataStream(url) } } - jobs.mapValues { job -> job.value.await() }.forEach { result -> - result.value?.let { stream -> - when { - result.key.contains("=csv", true) -> { - val orbitalData = dataParser.parseCSVStream(stream) - entries.addAll(orbitalData.map { data -> SatEntry(data) }) - } - result.key.contains(".zip", true) -> { - streams.add(ZipInputStream(stream).apply { nextEntry }) - } - else -> streams.add(stream) - } - } - } - streams.forEach { stream -> entries.addAll(importSatellites(stream)) } - entrySource.insertEntries(entries) - } - repositoryScope.launch(exceptionHandler) { - remoteSource.getDataStream(remoteSource.radioApi)?.let { stream -> - radioSource.insertRadios(dataParser.parseJSONStream(stream)) - _updateState.value = DataState.Success(0L) - } - } - } - - override fun updateFromWebNew() { + override fun updateFromWeb() { _updateState.value = DataState.Loading repositoryScope.launch(exceptionHandler) { val importedEntries = mutableListOf<SatEntry>() @@ -106,7 +75,7 @@ class DataRepository( jobsMap.mapValues { job -> job.value.await() }.forEach { entry -> entry.value?.let { stream -> when (val type = entry.key) { - "AMSAT" -> { + "AMSAT", "R4UAB" -> { // parse tle stream val satellites = importSatellites(stream) val catnums = satellites.map { it.data.catnum } diff --git a/build.gradle b/build.gradle index e9321431..c890a4ec 100644 --- a/build.gradle +++ b/build.gradle @@ -1,28 +1,28 @@ buildscript { ext { - hilt_version = '2.42' + hilt_version = '2.43.2' safe_args_version = '2.4.1' - application_version = '7.2.1' + application_version = '7.2.2' library_version = '7.1.2' kotlin_android_version = '1.6.10' core_ktx_version = '1.8.0' - core_splashscreen_version = '1.0.0-rc01' + core_splashscreen_version = '1.0.0' constraint_version = '2.1.4' - lifecycle_version = '2.4.1' - navigation_version = '2.4.2' - room_version = '2.4.2' + lifecycle_version = '2.5.1' + navigation_version = '2.5.1' + room_version = '2.4.3' material_version = '1.6.1' osmdroid_version = '6.1.13' json_version = '20220320' compose_version = '1.1.1' activity_compose_version = '1.4.0' material_adapter_version = '1.1.10' - fragment_test_version = '1.4.1' + fragment_test_version = '1.5.1' leakcanary_version = '2.9.1' junit_version = '4.13.2' - mockito_version = '4.6.0' + mockito_version = '4.6.1' robolectric_version = '4.8.1' - coroutines_test_version = '1.6.2' + coroutines_test_version = '1.6.4' androidx_test_version = '1.4.0' androidx_junit_version = '1.1.3' espresso_version = '3.4.0' diff --git a/fastlane/metadata/android/en-US/changelogs/311.txt b/fastlane/metadata/android/en-US/changelogs/311.txt new file mode 100644 index 00000000..bbbe9677 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/311.txt @@ -0,0 +1,5 @@ +Re-enabled the rotator control switch (fix) +Increased radar sweep rotation speed +Fixed negative lat/lon manual input bug +Added R4UAB TLE source and category +Updated libraries and dependencies \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/whatsnew/whatsnew-en-US b/fastlane/metadata/android/en-US/whatsnew/whatsnew-en-US index 2113a92d..bbbe9677 100644 --- a/fastlane/metadata/android/en-US/whatsnew/whatsnew-en-US +++ b/fastlane/metadata/android/en-US/whatsnew/whatsnew-en-US @@ -1,6 +1,5 @@ -Integrated AJohns bluetooth reporting function -Ref - https://github.com/rt-bishop/Look4Sat/pull/87 -Integrated BA7LWN Simplified Chinese translation -Ref - https://github.com/rt-bishop/Look4Sat/pull/92 -Added satellites sorting by their reported categories -Removed custom sources dialog, use file import instead \ No newline at end of file +Re-enabled the rotator control switch (fix) +Increased radar sweep rotation speed +Fixed negative lat/lon manual input bug +Added R4UAB TLE source and category +Updated libraries and dependencies \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7f27900d..7af4b25a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Apr 17 13:48:12 BST 2022 +#Sun Aug 07 12:57:36 BST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME