mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
First attempt to add Doppler shift frequency calculations
This commit is contained in:
1 parent
f60c44c4a7
commit
d8ef1c9f40
7 files changed
+100
-24
No files matched your search
@@ -27,10 +27,17 @@ import androidx.recyclerview.widget.RecyclerView
|
|||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
import com.rtbishop.look4sat.data.Transmitter
|
import com.rtbishop.look4sat.data.Transmitter
|
||||||
import com.rtbishop.look4sat.databinding.ItemTransmitterBinding
|
import com.rtbishop.look4sat.databinding.ItemTransmitterBinding
|
||||||
|
import com.rtbishop.look4sat.utility.PassPredictor
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class TransmitterAdapter : RecyclerView.Adapter<TransmitterAdapter.TransmitterHolder>() {
|
class TransmitterAdapter : RecyclerView.Adapter<TransmitterAdapter.TransmitterHolder>() {
|
||||||
|
|
||||||
private var transmittersList = emptyList<Transmitter>()
|
private var transmittersList = emptyList<Transmitter>()
|
||||||
|
private lateinit var predictor: PassPredictor
|
||||||
|
|
||||||
|
fun setPredictor(predict: PassPredictor) {
|
||||||
|
predictor = predict
|
||||||
|
}
|
||||||
|
|
||||||
fun setList(list: List<Transmitter>) {
|
fun setList(list: List<Transmitter>) {
|
||||||
transmittersList = list
|
transmittersList = list
|
||||||
@@ -65,6 +72,11 @@ class TransmitterAdapter : RecyclerView.Adapter<TransmitterAdapter.TransmitterHo
|
|||||||
context.getString(R.string.trans_down_low),
|
context.getString(R.string.trans_down_low),
|
||||||
transmitter.downlinkLow / freqDivider
|
transmitter.downlinkLow / freqDivider
|
||||||
)
|
)
|
||||||
|
binding.transDownlinkDoppler.text = String
|
||||||
|
.format(
|
||||||
|
context.getString(R.string.trans_down_low_doppler),
|
||||||
|
predictor.getDownlinkFreq(transmitter.downlinkLow, Date()) / freqDivider
|
||||||
|
)
|
||||||
} else if (transmitter.downlinkLow != null && transmitter.downlinkHigh != null) {
|
} else if (transmitter.downlinkLow != null && transmitter.downlinkHigh != null) {
|
||||||
binding.transDownlink.text = String
|
binding.transDownlink.text = String
|
||||||
.format(
|
.format(
|
||||||
@@ -72,8 +84,15 @@ class TransmitterAdapter : RecyclerView.Adapter<TransmitterAdapter.TransmitterHo
|
|||||||
transmitter.downlinkLow / freqDivider,
|
transmitter.downlinkLow / freqDivider,
|
||||||
transmitter.downlinkHigh / freqDivider
|
transmitter.downlinkHigh / freqDivider
|
||||||
)
|
)
|
||||||
|
binding.transDownlinkDoppler.text = String
|
||||||
|
.format(
|
||||||
|
context.getString(R.string.trans_down_lowHigh_doppler),
|
||||||
|
predictor.getDownlinkFreq(transmitter.downlinkLow, Date()) / freqDivider,
|
||||||
|
predictor.getDownlinkFreq(transmitter.downlinkHigh, Date()) / freqDivider
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
binding.transDownlink.text = context.getString(R.string.no_downlink)
|
binding.transDownlink.text = context.getString(R.string.no_downlink)
|
||||||
|
binding.transDownlinkDoppler.text = context.getString(R.string.no_downlink_doppler)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (transmitter.uplinkLow != null && transmitter.uplinkHigh == null) {
|
if (transmitter.uplinkLow != null && transmitter.uplinkHigh == null) {
|
||||||
@@ -81,14 +100,24 @@ class TransmitterAdapter : RecyclerView.Adapter<TransmitterAdapter.TransmitterHo
|
|||||||
context.getString(R.string.trans_up_low),
|
context.getString(R.string.trans_up_low),
|
||||||
transmitter.uplinkLow / freqDivider
|
transmitter.uplinkLow / freqDivider
|
||||||
)
|
)
|
||||||
|
binding.transUplinkDoppler.text = String.format(
|
||||||
|
context.getString(R.string.trans_up_low_doppler),
|
||||||
|
predictor.getUplinkFreq(transmitter.uplinkLow, Date()) / freqDivider
|
||||||
|
)
|
||||||
} else if (transmitter.uplinkLow != null && transmitter.uplinkHigh != null) {
|
} else if (transmitter.uplinkLow != null && transmitter.uplinkHigh != null) {
|
||||||
binding.transUplink.text = String.format(
|
binding.transUplink.text = String.format(
|
||||||
context.getString(R.string.trans_up_lowHigh),
|
context.getString(R.string.trans_up_lowHigh),
|
||||||
transmitter.uplinkLow / freqDivider,
|
transmitter.uplinkLow / freqDivider,
|
||||||
transmitter.uplinkHigh / freqDivider
|
transmitter.uplinkHigh / freqDivider
|
||||||
)
|
)
|
||||||
|
binding.transUplinkDoppler.text = String.format(
|
||||||
|
context.getString(R.string.trans_up_lowHigh_doppler),
|
||||||
|
predictor.getUplinkFreq(transmitter.uplinkLow, Date()) / freqDivider,
|
||||||
|
predictor.getUplinkFreq(transmitter.uplinkHigh, Date()) / freqDivider
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
binding.transUplink.text = context.getString(R.string.no_uplink)
|
binding.transUplink.text = context.getString(R.string.no_uplink)
|
||||||
|
binding.transUplinkDoppler.text = context.getString(R.string.no_uplink_doppler)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (transmitter.mode != null) {
|
if (transmitter.mode != null) {
|
||||||
|
|||||||
@@ -142,6 +142,7 @@ class PolarViewFragment : Fragment(R.layout.fragment_polar_view), SensorEventLis
|
|||||||
private fun observeTransmitters() {
|
private fun observeTransmitters() {
|
||||||
viewModel.getTransmittersForSat(satPass.tle.catnum).observe(viewLifecycleOwner, Observer {
|
viewModel.getTransmittersForSat(satPass.tle.catnum).observe(viewLifecycleOwner, Observer {
|
||||||
if (it.isNotEmpty()) {
|
if (it.isNotEmpty()) {
|
||||||
|
transmitterAdapter.setPredictor(satPass.predictor)
|
||||||
transmitterAdapter.setList(it)
|
transmitterAdapter.setList(it)
|
||||||
transmitterAdapter.notifyDataSetChanged()
|
transmitterAdapter.notifyDataSetChanged()
|
||||||
binding.recPolar.visibility = View.VISIBLE
|
binding.recPolar.visibility = View.VISIBLE
|
||||||
|
|||||||
@@ -57,6 +57,34 @@
|
|||||||
app:layout_constraintStart_toEndOf="@+id/trans_img_uplink"
|
app:layout_constraintStart_toEndOf="@+id/trans_img_uplink"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/trans_downlink" />
|
app:layout_constraintTop_toBottomOf="@+id/trans_downlink" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/separator"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:padding="15dp"
|
||||||
|
android:layout_marginLeft="20dp"
|
||||||
|
android:layout_marginRight="20dp"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/trans_uplink"
|
||||||
|
android:background="#333"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/trans_downlink_doppler"
|
||||||
|
style="@style/CardTransText"
|
||||||
|
android:text="@string/trans_down_lowHigh_doppler"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/trans_img_downlink_doppler"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/separator" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/trans_uplink_doppler"
|
||||||
|
style="@style/CardTransText"
|
||||||
|
android:text="@string/trans_up_lowHigh_doppler"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/trans_img_uplink_doppler"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/trans_downlink_doppler" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/trans_mode"
|
android:id="@+id/trans_mode"
|
||||||
style="@style/CardTransText"
|
style="@style/CardTransText"
|
||||||
@@ -65,7 +93,7 @@
|
|||||||
android:text="@string/trans_mode"
|
android:text="@string/trans_mode"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/trans_uplink" />
|
app:layout_constraintTop_toBottomOf="@+id/trans_uplink_doppler" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/trans_inverted"
|
android:id="@+id/trans_inverted"
|
||||||
@@ -114,5 +142,32 @@
|
|||||||
app:layout_constraintTop_toBottomOf="@+id/trans_downlink"
|
app:layout_constraintTop_toBottomOf="@+id/trans_downlink"
|
||||||
app:srcCompat="@drawable/ic_arrow" />
|
app:srcCompat="@drawable/ic_arrow" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/trans_img_downlink_doppler"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:contentDescription="@string/placeholder"
|
||||||
|
android:rotation="180"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/trans_downlink_doppler"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/trans_downlink_doppler"
|
||||||
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/trans_downlink_doppler"
|
||||||
|
app:srcCompat="@drawable/ic_arrow" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/trans_img_uplink_doppler"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:contentDescription="@string/placeholder"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/trans_uplink_doppler"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/trans_uplink_doppler"
|
||||||
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/trans_downlink_doppler"
|
||||||
|
app:srcCompat="@drawable/ic_arrow" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</com.google.android.material.card.MaterialCardView>
|
</com.google.android.material.card.MaterialCardView>
|
||||||
@@ -92,6 +92,10 @@
|
|||||||
<string name="trans_up_lowHigh">Восход.: %.4f - %.4f MHz</string>
|
<string name="trans_up_lowHigh">Восход.: %.4f - %.4f MHz</string>
|
||||||
<string name="trans_down_low">Нисход.: %.4f MHz</string>
|
<string name="trans_down_low">Нисход.: %.4f MHz</string>
|
||||||
<string name="trans_down_lowHigh">Нисход.: %.4f - %.4f MHz</string>
|
<string name="trans_down_lowHigh">Нисход.: %.4f - %.4f MHz</string>
|
||||||
|
<string name="trans_up_low_doppler">Восход.: %.4f MHz</string>
|
||||||
|
<string name="trans_up_lowHigh_doppler">Восход.: %.4f - %.4f MHz</string>
|
||||||
|
<string name="trans_down_low_doppler">Нисход.: %.4f MHz</string>
|
||||||
|
<string name="trans_down_lowHigh_doppler">Нисход.: %.4f - %.4f MHz</string>
|
||||||
|
|
||||||
<string name="info_swipe_text">Проведите по экрану вниз, чтобы обновить список пролетов
|
<string name="info_swipe_text">Проведите по экрану вниз, чтобы обновить список пролетов
|
||||||
для выбранных спутников</string>
|
для выбранных спутников</string>
|
||||||
|
|||||||
@@ -78,6 +78,8 @@
|
|||||||
<string name="no_mode">Mode: null</string>
|
<string name="no_mode">Mode: null</string>
|
||||||
<string name="no_uplink">Uplink: null</string>
|
<string name="no_uplink">Uplink: null</string>
|
||||||
<string name="no_downlink">Downlink: null</string>
|
<string name="no_downlink">Downlink: null</string>
|
||||||
|
<string name="no_uplink_doppler">Current uplink: null</string>
|
||||||
|
<string name="no_downlink_doppler">Current downlink: null</string>
|
||||||
<string name="no_trans">No transceivers found for this satellite</string>
|
<string name="no_trans">No transceivers found for this satellite</string>
|
||||||
|
|
||||||
<string name="err_no_permissions">Missing permissions</string>
|
<string name="err_no_permissions">Missing permissions</string>
|
||||||
@@ -108,6 +110,10 @@
|
|||||||
<string name="trans_up_lowHigh">Uplink: %.4f - %.4f MHz</string>
|
<string name="trans_up_lowHigh">Uplink: %.4f - %.4f MHz</string>
|
||||||
<string name="trans_down_low">Downlink: %.4f MHz</string>
|
<string name="trans_down_low">Downlink: %.4f MHz</string>
|
||||||
<string name="trans_down_lowHigh">Downlink: %.4f - %.4f MHz</string>
|
<string name="trans_down_lowHigh">Downlink: %.4f - %.4f MHz</string>
|
||||||
|
<string name="trans_up_low_doppler">Current uplink: %.4f MHz</string>
|
||||||
|
<string name="trans_up_lowHigh_doppler">Current uplink: %.4f - %.4f MHz</string>
|
||||||
|
<string name="trans_down_low_doppler">Current downlink: %.4f MHz</string>
|
||||||
|
<string name="trans_down_lowHigh_doppler">Current downlink: %.4f - %.4f MHz</string>
|
||||||
|
|
||||||
<string name="info_swipe_text">
|
<string name="info_swipe_text">
|
||||||
Swipe the screen to refresh the list of passes for selected satellites</string>
|
Swipe the screen to refresh the list of passes for selected satellites</string>
|
||||||
|
|||||||
+2
-1
@@ -26,9 +26,10 @@ buildscript {
|
|||||||
|
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.6.3'
|
classpath 'com.android.tools.build:gradle:4.0.1'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
|
||||||
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.2.2"
|
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.2.2"
|
||||||
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.10"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-22
@@ -1,26 +1,6 @@
|
|||||||
#
|
#Thu Sep 17 13:43:53 CEST 2020
|
||||||
# Look4Sat. Amateur radio and weather satellite tracker and passes predictor for Android.
|
|
||||||
# Copyright (C) 2019, 2020 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 2 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, write to the Free Software Foundation, Inc.,
|
|
||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
#
|
|
||||||
|
|
||||||
#Mon Feb 24 22:26:03 GMT 2020
|
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
|
||||||
distributionSha256Sum=abc10bcedb58806e8654210f96031db541bcd2d6fc3161e81cb0572d6a15e821
|
|
||||||
Reference in new issue
Block a user