From f2689edce4b713357a409507c7738c2a0a8355bb Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Wed, 12 Feb 2020 21:27:35 +0000 Subject: [PATCH] Libs update, bug with SatPass parcelable fixed, regression fixed --- app/build.gradle | 6 +-- .../com/rtbishop/look4sat/MainViewModel.kt | 45 +++++++++++-------- .../com/rtbishop/look4sat/repo/SatPass.kt | 10 ++--- .../rtbishop/look4sat/ui/PassListFragment.kt | 3 +- .../rtbishop/look4sat/ui/PolarViewFragment.kt | 2 +- .../look4sat/ui/adapters/SatPassAdapter.kt | 14 +++--- app/src/main/res/navigation/nav_graph.xml | 4 +- app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + build.gradle | 6 +-- 10 files changed, 52 insertions(+), 40 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0aedbf82..f865430b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,13 +25,13 @@ apply plugin: "androidx.navigation.safeargs.kotlin" android { compileSdkVersion 29 - buildToolsVersion "29.0.2" + buildToolsVersion "29.0.3" defaultConfig { applicationId "com.rtbishop.look4sat" minSdkVersion 21 targetSdkVersion 29 - versionCode 3 - versionName '1.2' + versionCode 5 + versionName '1.2.2' } buildTypes { release { diff --git a/app/src/main/java/com/rtbishop/look4sat/MainViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/MainViewModel.kt index 68ad840b..fe368ebe 100644 --- a/app/src/main/java/com/rtbishop/look4sat/MainViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/MainViewModel.kt @@ -38,6 +38,7 @@ import com.rtbishop.look4sat.repo.Repository import com.rtbishop.look4sat.repo.SatPass import com.rtbishop.look4sat.repo.Transmitter import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.FileNotFoundException @@ -75,6 +76,8 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { "https://celestrak.com/NORAD/elements/weather.txt" ) + private var calculationJob: Job? = null + @Inject lateinit var locationClient: FusedLocationProviderClient @Inject @@ -177,6 +180,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { } fun getPasses() { + calculationJob?.cancel() val passList = mutableListOf() val dateNow = Date() val dateFuture = Calendar.getInstance().let { @@ -184,28 +188,33 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { it.add(Calendar.HOUR, hoursAhead) it.time } - viewModelScope.launch { - withContext(Dispatchers.Default) { - tleSelection.forEach { indexOfSelection -> - val tle = tleMainList[indexOfSelection] - try { - val predictor = PassPredictor(tle, gsp.value!!) - val passes = predictor.getPasses(dateNow, hoursAhead, true) - passes.forEach { - passList.add(SatPass(tle, predictor, it)) + calculationJob = viewModelScope.launch { + if (tleMainList.isNotEmpty() && tleSelection.isNotEmpty()) { + withContext(Dispatchers.Default) { + tleSelection.forEach { indexOfSelection -> + val tle = tleMainList[indexOfSelection] + try { + val predictor = PassPredictor(tle, gsp.value!!) + val passes = predictor.getPasses(dateNow, hoursAhead, true) + passes.forEach { + passList.add(SatPass(tle, predictor, it)) + } + } catch (exception: IllegalArgumentException) { + _debugMessage.postValue(app.getString(R.string.err_parse_tle)) + } catch (exception: SatNotFoundException) { + _debugMessage.postValue(app.getString(R.string.err_sat_wont_pass)) } - } catch (exception: IllegalArgumentException) { - _debugMessage.postValue(app.getString(R.string.err_parse_tle)) - } catch (exception: SatNotFoundException) { - _debugMessage.postValue(app.getString(R.string.err_sat_wont_pass)) } + passList.removeAll { it.pass.startTime.after(dateFuture) } + passList.removeAll { it.pass.endTime.before(dateNow) } + passList.removeAll { it.pass.maxEl < minEl } + passList.sortBy { it.pass.startTime } } - passList.removeAll { it.pass.startTime.after(dateFuture) } - passList.removeAll { it.pass.endTime.before(dateNow) } - passList.removeAll { it.pass.maxEl < minEl } - passList.sortBy { it.pass.startTime } + _satPassList.postValue(passList) + } else { + _satPassList.postValue(mutableListOf()) + _debugMessage.postValue(app.getString(R.string.err_no_sat_selected)) } - _satPassList.postValue(passList) } } diff --git a/app/src/main/java/com/rtbishop/look4sat/repo/SatPass.kt b/app/src/main/java/com/rtbishop/look4sat/repo/SatPass.kt index 6dd6aaa4..f6d23408 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/SatPass.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/SatPass.kt @@ -19,18 +19,14 @@ package com.rtbishop.look4sat.repo -import android.os.Parcelable import com.github.amsacode.predict4java.SatPassTime import com.github.amsacode.predict4java.TLE import com.rtbishop.look4sat.predict4kotlin.PassPredictor -import kotlinx.android.parcel.Parcelize -import kotlinx.android.parcel.RawValue -@Parcelize data class SatPass( val tle: TLE, - val predictor: @RawValue PassPredictor, - val pass: @RawValue SatPassTime, + val predictor: PassPredictor, + val pass: SatPassTime, var progress: Int = 0, var active: Boolean = false -) : Parcelable \ No newline at end of file +) \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/PassListFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/PassListFragment.kt index 57045508..4b8a8800 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/PassListFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/PassListFragment.kt @@ -65,7 +65,7 @@ class PassListFragment : Fragment() { super.onCreate(savedInstanceState) mainActivity = activity as MainActivity viewModel = ViewModelProvider(mainActivity).get(MainViewModel::class.java) - satPassAdapter = SatPassAdapter() + satPassAdapter = SatPassAdapter(viewModel) satPassList = mutableListOf() } @@ -97,6 +97,7 @@ class PassListFragment : Fragment() { satPassRecycler.apply { layoutManager = LinearLayoutManager(mainActivity) adapter = satPassAdapter + isVerticalScrollBarEnabled = false (itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false } satPassAdapter.setList(satPassList) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/PolarViewFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/PolarViewFragment.kt index ff27c774..f00e1eba 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/PolarViewFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/PolarViewFragment.kt @@ -83,7 +83,7 @@ class PolarViewFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val delay = viewModel.delay - satPass = args.satPass + satPass = viewModel.passSatList.value!![args.satPassIndex] mainActivity.supportActionBar?.title = satPass.tle.name polarViewFrame = view.findViewById(R.id.polar_view_frame) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SatPassAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SatPassAdapter.kt index 2fadcb30..b6a552f5 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SatPassAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SatPassAdapter.kt @@ -28,13 +28,15 @@ import android.widget.ProgressBar import android.widget.TextView import androidx.navigation.findNavController import androidx.recyclerview.widget.RecyclerView +import com.rtbishop.look4sat.MainViewModel import com.rtbishop.look4sat.R import com.rtbishop.look4sat.repo.SatPass import com.rtbishop.look4sat.ui.PassListFragmentDirections import java.text.SimpleDateFormat import java.util.* -class SatPassAdapter : RecyclerView.Adapter() { +class SatPassAdapter(val viewModel: MainViewModel) : + RecyclerView.Adapter() { private var satPassList = mutableListOf() @@ -134,8 +136,9 @@ class SatPassAdapter : RecyclerView.Adapter() { progressBar.progress = satPass.progress itemView.setOnClickListener { - val action = PassListFragmentDirections.actionPassToPolar(satPass) - itemView.findNavController().navigate(action) + val satPassIndex = viewModel.passSatList.value!!.indexOf(satPass) + val action = PassListFragmentDirections.actionPassToPolar(satPassIndex) + it.findNavController().navigate(action) } } } @@ -159,8 +162,9 @@ class SatPassAdapter : RecyclerView.Adapter() { String.format(context.getString(R.string.pat_elevation), satPass.pass.maxEl) itemView.setOnClickListener { - val action = PassListFragmentDirections.actionPassToPolar(satPass) - itemView.findNavController().navigate(action) + val satPassIndex = viewModel.passSatList.value!!.indexOf(satPass) + val action = PassListFragmentDirections.actionPassToPolar(satPassIndex) + it.findNavController().navigate(action) } } } diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 3cc00ea9..f51f3dc0 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -44,8 +44,8 @@ android:label="@string/menu_polar_view" tools:layout="@layout/fragment_polar_view"> + android:name="satPassIndex" + app:argType="integer" /> Пожалуйста, введите значение Не найден файл TLE Не найден файл выбранных спутников + Не выбраны спутники НПС — %2d° Элевация: %.1f° diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7dec5f27..e2c906be 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -82,6 +82,7 @@ Please, enter the value TLE file was not found Selection file was not found + No satellites selected %s ID: %d diff --git a/build.gradle b/build.gradle index 9bb9f673..bc9c0c16 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,7 @@ buildscript { dependencies { classpath "com.android.tools.build:gradle:3.5.3" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61" - classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.2.0" + classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.2.1" } } @@ -48,10 +48,10 @@ ext { supportLib = '1.0.0' constraintLayout = '1.1.3' - ktx = '1.1.0' + ktx = '1.2.0' preference = '1.1.0' - navigation = '2.2.0' + navigation = '2.2.1' lifecycle = '2.2.0' room = '2.2.3'