mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-05 12:17:22 +00:00
Optimized transmitters adapter, changes to the recycler and ViewHolders
This commit is contained in:
1 parent
69b3e4f70b
commit
810fa5b85c
12 files changed
+152
-303
No files matched your search
@@ -30,17 +30,25 @@ import com.rtbishop.look4sat.databinding.ItemTransBinding
|
|||||||
import com.rtbishop.look4sat.utility.PassPredictor
|
import com.rtbishop.look4sat.utility.PassPredictor
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class TransAdapter : RecyclerView.Adapter<TransAdapter.TransHolder>() {
|
class TransAdapter(context: Context) : RecyclerView.Adapter<TransAdapter.TransHolder>() {
|
||||||
|
|
||||||
private var transmittersList = emptyList<SatTrans>()
|
|
||||||
private lateinit var predictor: PassPredictor
|
private lateinit var predictor: PassPredictor
|
||||||
|
private val divider = 1000000f
|
||||||
|
private val strNo = context.getString(R.string.btn_no)
|
||||||
|
private val strYes = context.getString(R.string.btn_yes)
|
||||||
|
private val mode = context.getString(R.string.trans_mode)
|
||||||
|
private val formatLink = context.getString(R.string.trans_down_low_doppler)
|
||||||
|
private val formatLinkNull = context.getString(R.string.no_downlink_doppler)
|
||||||
|
private val isInverted = context.getString(R.string.trans_inverted)
|
||||||
|
private var transmittersList = emptyList<SatTrans>()
|
||||||
|
|
||||||
fun setPredictor(predict: PassPredictor) {
|
fun setPredictor(predictor: PassPredictor) {
|
||||||
predictor = predict
|
this.predictor = predictor
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setList(list: List<SatTrans>) {
|
fun setList(list: List<SatTrans>) {
|
||||||
transmittersList = list
|
transmittersList = list
|
||||||
|
notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getItemCount(): Int {
|
override fun getItemCount(): Int {
|
||||||
@@ -61,82 +69,24 @@ class TransAdapter : RecyclerView.Adapter<TransAdapter.TransHolder>() {
|
|||||||
RecyclerView.ViewHolder(itemView) {
|
RecyclerView.ViewHolder(itemView) {
|
||||||
|
|
||||||
fun bind(satTrans: SatTrans) {
|
fun bind(satTrans: SatTrans) {
|
||||||
val context: Context = itemView.context
|
val dateNow = Date()
|
||||||
val freqDivider = 1000000f
|
binding.description.text = satTrans.description
|
||||||
|
|
||||||
binding.transDescription.text = satTrans.description
|
if (satTrans.downlinkLow != null) {
|
||||||
|
val downFreq = predictor.getDownlinkFreq(satTrans.downlinkLow, dateNow) / divider
|
||||||
|
binding.downlink.text = String.format(formatLink, downFreq)
|
||||||
|
} else binding.downlink.text = formatLinkNull
|
||||||
|
|
||||||
if (satTrans.downlinkLow != null && satTrans.downlinkHigh == null) {
|
if (satTrans.uplinkLow != null) {
|
||||||
binding.transDownlink.text = String
|
val upFreq = predictor.getUplinkFreq(satTrans.uplinkLow, dateNow) / divider
|
||||||
.format(
|
binding.uplink.text = String.format(formatLink, upFreq)
|
||||||
context.getString(R.string.trans_down_low),
|
} else binding.uplink.text = formatLinkNull
|
||||||
satTrans.downlinkLow / freqDivider
|
|
||||||
)
|
|
||||||
binding.transDownlinkDoppler.text = String
|
|
||||||
.format(
|
|
||||||
context.getString(R.string.trans_down_low_doppler),
|
|
||||||
predictor.getDownlinkFreq(satTrans.downlinkLow, Date()) / freqDivider
|
|
||||||
)
|
|
||||||
} else if (satTrans.downlinkLow != null && satTrans.downlinkHigh != null) {
|
|
||||||
binding.transDownlink.text = String
|
|
||||||
.format(
|
|
||||||
context.getString(R.string.trans_down_lowHigh),
|
|
||||||
satTrans.downlinkLow / freqDivider,
|
|
||||||
satTrans.downlinkHigh / freqDivider
|
|
||||||
)
|
|
||||||
binding.transDownlinkDoppler.text = String
|
|
||||||
.format(
|
|
||||||
context.getString(R.string.trans_down_lowHigh_doppler),
|
|
||||||
predictor.getDownlinkFreq(satTrans.downlinkLow, Date()) / freqDivider,
|
|
||||||
predictor.getDownlinkFreq(satTrans.downlinkHigh, Date()) / freqDivider
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
binding.transDownlink.text = context.getString(R.string.no_downlink)
|
|
||||||
binding.transDownlinkDoppler.text = context.getString(R.string.no_downlink_doppler)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (satTrans.uplinkLow != null && satTrans.uplinkHigh == null) {
|
if (satTrans.mode != null) binding.mode.text = String.format(mode, satTrans.mode)
|
||||||
binding.transUplink.text = String.format(
|
else binding.mode.text = String.format(mode, strNo)
|
||||||
context.getString(R.string.trans_up_low),
|
|
||||||
satTrans.uplinkLow / freqDivider
|
|
||||||
)
|
|
||||||
binding.transUplinkDoppler.text = String.format(
|
|
||||||
context.getString(R.string.trans_up_low_doppler),
|
|
||||||
predictor.getUplinkFreq(satTrans.uplinkLow, Date()) / freqDivider
|
|
||||||
)
|
|
||||||
} else if (satTrans.uplinkLow != null && satTrans.uplinkHigh != null) {
|
|
||||||
binding.transUplink.text = String.format(
|
|
||||||
context.getString(R.string.trans_up_lowHigh),
|
|
||||||
satTrans.uplinkLow / freqDivider,
|
|
||||||
satTrans.uplinkHigh / freqDivider
|
|
||||||
)
|
|
||||||
binding.transUplinkDoppler.text = String.format(
|
|
||||||
context.getString(R.string.trans_up_lowHigh_doppler),
|
|
||||||
predictor.getUplinkFreq(satTrans.uplinkLow, Date()) / freqDivider,
|
|
||||||
predictor.getUplinkFreq(satTrans.uplinkHigh, Date()) / freqDivider
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
binding.transUplink.text = context.getString(R.string.no_uplink)
|
|
||||||
binding.transUplinkDoppler.text = context.getString(R.string.no_uplink_doppler)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (satTrans.mode != null) {
|
if (satTrans.isInverted) binding.isInverted.text = String.format(isInverted, strYes)
|
||||||
binding.transMode.text =
|
else binding.isInverted.text = String.format(isInverted, strNo)
|
||||||
String.format(context.getString(R.string.trans_mode), satTrans.mode)
|
|
||||||
} else {
|
|
||||||
binding.transMode.text = context.getString(R.string.no_mode)
|
|
||||||
}
|
|
||||||
if (satTrans.isInverted) {
|
|
||||||
binding.transInverted.text = String.format(
|
|
||||||
context.getString(R.string.trans_inverted),
|
|
||||||
context.getString(R.string.btn_yes)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
binding.transInverted.text = String.format(
|
|
||||||
context.getString(R.string.trans_inverted),
|
|
||||||
context.getString(R.string.btn_no)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -24,9 +24,7 @@ import android.hardware.*
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentActivity
|
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.lifecycle.lifecycleScope
|
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
@@ -37,9 +35,8 @@ import com.rtbishop.look4sat.databinding.FragmentPolarBinding
|
|||||||
import com.rtbishop.look4sat.ui.adapters.TransAdapter
|
import com.rtbishop.look4sat.ui.adapters.TransAdapter
|
||||||
import com.rtbishop.look4sat.ui.views.PolarView
|
import com.rtbishop.look4sat.ui.views.PolarView
|
||||||
import com.rtbishop.look4sat.utility.PrefsManager
|
import com.rtbishop.look4sat.utility.PrefsManager
|
||||||
|
import com.rtbishop.look4sat.utility.RecyclerDivider
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.delay
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.math.round
|
import kotlin.math.round
|
||||||
@@ -50,24 +47,26 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener {
|
|||||||
@Inject
|
@Inject
|
||||||
lateinit var prefsManager: PrefsManager
|
lateinit var prefsManager: PrefsManager
|
||||||
|
|
||||||
private lateinit var mainActivity: FragmentActivity
|
private lateinit var transmitterAdapter: TransAdapter
|
||||||
private lateinit var binding: FragmentPolarBinding
|
private lateinit var binding: FragmentPolarBinding
|
||||||
private lateinit var satPass: SatPass
|
private lateinit var satPass: SatPass
|
||||||
private lateinit var sensorManager: SensorManager
|
private lateinit var sensorManager: SensorManager
|
||||||
private val viewModel: SharedViewModel by activityViewModels()
|
private val viewModel: SharedViewModel by activityViewModels()
|
||||||
private val args: PolarFragmentArgs by navArgs()
|
private val args: PolarFragmentArgs by navArgs()
|
||||||
private val transmitterAdapter = TransAdapter()
|
|
||||||
private var magneticDeclination = 0f
|
private var magneticDeclination = 0f
|
||||||
private var polarView: PolarView? = null
|
private var polarView: PolarView? = null
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
mainActivity = requireActivity()
|
|
||||||
binding = FragmentPolarBinding.bind(view)
|
binding = FragmentPolarBinding.bind(view)
|
||||||
sensorManager = mainActivity.getSystemService(Context.SENSOR_SERVICE) as SensorManager
|
sensorManager = requireContext().getSystemService(Context.SENSOR_SERVICE) as SensorManager
|
||||||
|
transmitterAdapter = TransAdapter(requireContext())
|
||||||
binding.recycler.apply {
|
binding.recycler.apply {
|
||||||
layoutManager = LinearLayoutManager(mainActivity)
|
setHasFixedSize(true)
|
||||||
adapter = transmitterAdapter
|
adapter = transmitterAdapter
|
||||||
|
isVerticalScrollBarEnabled = false
|
||||||
|
layoutManager = LinearLayoutManager(context)
|
||||||
|
addItemDecoration(RecyclerDivider(R.drawable.rec_divider_dark))
|
||||||
}
|
}
|
||||||
calculateMagneticDeclination()
|
calculateMagneticDeclination()
|
||||||
observePasses()
|
observePasses()
|
||||||
@@ -109,20 +108,26 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener {
|
|||||||
viewModel.getPasses().observe(viewLifecycleOwner, { result ->
|
viewModel.getPasses().observe(viewLifecycleOwner, { result ->
|
||||||
if (result is Result.Success) {
|
if (result is Result.Success) {
|
||||||
satPass = result.data[args.satPassIndex]
|
satPass = result.data[args.satPassIndex]
|
||||||
polarView = PolarView(mainActivity, satPass)
|
polarView = PolarView(requireContext(), satPass)
|
||||||
binding.frame.addView(polarView)
|
binding.frame.addView(polarView)
|
||||||
|
observeTimer()
|
||||||
observeTransmitters()
|
observeTransmitters()
|
||||||
refreshText()
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun observeTimer() {
|
||||||
|
viewModel.getCurrentTimeMillis().observe(viewLifecycleOwner, {
|
||||||
|
transmitterAdapter.notifyDataSetChanged()
|
||||||
|
setPassText(Date(it))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
private fun observeTransmitters() {
|
private fun observeTransmitters() {
|
||||||
viewModel.getTransmittersForSat(satPass.tle.catnum).observe(viewLifecycleOwner, {
|
viewModel.getTransmittersForSat(satPass.tle.catnum).observe(viewLifecycleOwner, {
|
||||||
if (it.isNotEmpty()) {
|
if (it.isNotEmpty()) {
|
||||||
transmitterAdapter.setPredictor(satPass.predictor)
|
transmitterAdapter.setPredictor(satPass.predictor)
|
||||||
transmitterAdapter.setList(it)
|
transmitterAdapter.setList(it)
|
||||||
transmitterAdapter.notifyDataSetChanged()
|
|
||||||
binding.recycler.visibility = View.VISIBLE
|
binding.recycler.visibility = View.VISIBLE
|
||||||
binding.noTransMsg.visibility = View.INVISIBLE
|
binding.noTransMsg.visibility = View.INVISIBLE
|
||||||
} else {
|
} else {
|
||||||
@@ -133,33 +138,22 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun calculateMagneticDeclination() {
|
private fun calculateMagneticDeclination() {
|
||||||
val position = prefsManager.getStationPosition()
|
prefsManager.getStationPosition().let {
|
||||||
val geoField = GeomagneticField(
|
magneticDeclination = GeomagneticField(
|
||||||
position.latitude.toFloat(),
|
it.latitude.toFloat(),
|
||||||
position.longitude.toFloat(),
|
it.longitude.toFloat(),
|
||||||
position.heightAMSL.toFloat(),
|
it.heightAMSL.toFloat(),
|
||||||
System.currentTimeMillis()
|
System.currentTimeMillis()
|
||||||
)
|
).declination
|
||||||
magneticDeclination = geoField.declination
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun refreshText() {
|
|
||||||
lifecycleScope.launch {
|
|
||||||
while (true) {
|
|
||||||
setPassText()
|
|
||||||
polarView?.invalidate()
|
|
||||||
transmitterAdapter.notifyDataSetChanged()
|
|
||||||
delay(3000)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setPassText() {
|
private fun setPassText(date: Date) {
|
||||||
val satPos = satPass.predictor.getSatPos(Date())
|
val satPos = satPass.predictor.getSatPos(date)
|
||||||
val polarAz = mainActivity.getString(R.string.pat_azimuth)
|
val polarAz = getString(R.string.pat_azimuth)
|
||||||
val polarEl = mainActivity.getString(R.string.pat_elevation)
|
val polarEl = getString(R.string.pat_elevation)
|
||||||
val polarRng = mainActivity.getString(R.string.pat_distance)
|
val polarRng = getString(R.string.pat_distance)
|
||||||
val polarAlt = mainActivity.getString(R.string.pat_altitude)
|
val polarAlt = getString(R.string.pat_altitude)
|
||||||
binding.azimuth.text = String.format(polarAz, Math.toDegrees(satPos.azimuth))
|
binding.azimuth.text = String.format(polarAz, Math.toDegrees(satPos.azimuth))
|
||||||
binding.elevation.text = String.format(polarEl, Math.toDegrees(satPos.elevation))
|
binding.elevation.text = String.format(polarEl, Math.toDegrees(satPos.elevation))
|
||||||
binding.distance.text = String.format(polarRng, satPos.range)
|
binding.distance.text = String.format(polarRng, satPos.range)
|
||||||
|
|||||||
@@ -22,16 +22,16 @@ class PolarView(context: Context) : View(context) {
|
|||||||
private val polarWidth = resources.displayMetrics.widthPixels
|
private val polarWidth = resources.displayMetrics.widthPixels
|
||||||
private val polarCenter = polarWidth / 2f
|
private val polarCenter = polarWidth / 2f
|
||||||
private val scale = resources.displayMetrics.density
|
private val scale = resources.displayMetrics.density
|
||||||
private val radius = polarWidth * 0.49f
|
private val radius = polarWidth * 0.48f
|
||||||
private val txtSize = scale * 15
|
private val txtSize = scale * 16
|
||||||
private val path: Path = Path()
|
private val path: Path = Path()
|
||||||
private var azimuth = 0f
|
private val piDiv2 = Math.PI / 2.0
|
||||||
|
|
||||||
private val radarPaint = Paint().apply {
|
private val radarPaint = Paint().apply {
|
||||||
isAntiAlias = true
|
isAntiAlias = true
|
||||||
color = ContextCompat.getColor(context, R.color.greyLight)
|
color = ContextCompat.getColor(context, R.color.greyLight)
|
||||||
style = Paint.Style.STROKE
|
style = Paint.Style.STROKE
|
||||||
strokeWidth = scale
|
strokeWidth = scale * 1.6f
|
||||||
}
|
}
|
||||||
private val txtPaint = Paint().apply {
|
private val txtPaint = Paint().apply {
|
||||||
isAntiAlias = true
|
isAntiAlias = true
|
||||||
@@ -42,7 +42,7 @@ class PolarView(context: Context) : View(context) {
|
|||||||
isAntiAlias = true
|
isAntiAlias = true
|
||||||
color = ContextCompat.getColor(context, R.color.satTrack)
|
color = ContextCompat.getColor(context, R.color.satTrack)
|
||||||
style = Paint.Style.STROKE
|
style = Paint.Style.STROKE
|
||||||
strokeWidth = scale
|
strokeWidth = scale * 1.6f
|
||||||
}
|
}
|
||||||
private val satPaint = Paint().apply {
|
private val satPaint = Paint().apply {
|
||||||
isAntiAlias = true
|
isAntiAlias = true
|
||||||
@@ -51,13 +51,10 @@ class PolarView(context: Context) : View(context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDraw(canvas: Canvas) {
|
override fun onDraw(canvas: Canvas) {
|
||||||
canvas.rotate(-azimuth, polarCenter, polarCenter)
|
|
||||||
canvas.translate(polarCenter, polarCenter)
|
canvas.translate(polarCenter, polarCenter)
|
||||||
drawRadarView(canvas)
|
drawRadarView(canvas)
|
||||||
drawRadarText(canvas)
|
drawRadarText(canvas)
|
||||||
if (!pass.tle.isDeepspace) {
|
if (!pass.tle.isDeepspace) drawPassTrajectory(canvas, pass)
|
||||||
drawPassTrajectory(canvas, pass)
|
|
||||||
}
|
|
||||||
drawSatellite(canvas, pass)
|
drawSatellite(canvas, pass)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,18 +96,16 @@ class PolarView(context: Context) : View(context) {
|
|||||||
if (satPos.elevation > 0) {
|
if (satPos.elevation > 0) {
|
||||||
val x = sph2CartX(satPos.azimuth, satPos.elevation, radius.toDouble())
|
val x = sph2CartX(satPos.azimuth, satPos.elevation, radius.toDouble())
|
||||||
val y = sph2CartY(satPos.azimuth, satPos.elevation, radius.toDouble())
|
val y = sph2CartY(satPos.azimuth, satPos.elevation, radius.toDouble())
|
||||||
cvs.drawCircle(x, -y, txtSize / 3, satPaint)
|
cvs.drawCircle(x, -y, txtSize / 2.6f, satPaint)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun sph2CartX(azimuth: Double, elevation: Double, r: Double): Float {
|
private fun sph2CartX(azimuth: Double, elevation: Double, r: Double): Float {
|
||||||
val piDiv2 = Math.PI / 2.0
|
|
||||||
val radius = r * (piDiv2 - elevation) / piDiv2
|
val radius = r * (piDiv2 - elevation) / piDiv2
|
||||||
return (radius * cos(piDiv2 - azimuth)).toFloat()
|
return (radius * cos(piDiv2 - azimuth)).toFloat()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun sph2CartY(azimuth: Double, elevation: Double, r: Double): Float {
|
private fun sph2CartY(azimuth: Double, elevation: Double, r: Double): Float {
|
||||||
val piDiv2 = Math.PI / 2.0
|
|
||||||
val radius = r * (piDiv2 - elevation) / piDiv2
|
val radius = r * (piDiv2 - elevation) / piDiv2
|
||||||
return (radius * sin(piDiv2 - azimuth)).toFloat()
|
return (radius * sin(piDiv2 - azimuth)).toFloat()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,3 @@
|
|||||||
<!--
|
|
||||||
~ 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
@@ -24,5 +5,5 @@
|
|||||||
android:viewportHeight="24">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@color/themeLight"
|
android:fillColor="@color/themeLight"
|
||||||
android:pathData="M7.41,15.41L12,10.83l4.59,4.58L18,14l-6,-6 -6,6z" />
|
android:pathData="M8,5v14l11,-7z" />
|
||||||
</vector>
|
</vector>
|
||||||
@@ -28,10 +28,7 @@
|
|||||||
|
|
||||||
<com.google.android.material.card.MaterialCardView
|
<com.google.android.material.card.MaterialCardView
|
||||||
android:id="@+id/entries_bar"
|
android:id="@+id/entries_bar"
|
||||||
android:layout_width="0dp"
|
style="@style/TopBar"
|
||||||
android:layout_height="48dp"
|
|
||||||
app:cardCornerRadius="0dp"
|
|
||||||
app:cardElevation="1dp"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|||||||
@@ -29,10 +29,7 @@
|
|||||||
|
|
||||||
<com.google.android.material.card.MaterialCardView
|
<com.google.android.material.card.MaterialCardView
|
||||||
android:id="@+id/passes_bar"
|
android:id="@+id/passes_bar"
|
||||||
android:layout_width="0dp"
|
style="@style/TopBar"
|
||||||
android:layout_height="48dp"
|
|
||||||
app:cardCornerRadius="0dp"
|
|
||||||
app:cardElevation="1dp"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|||||||
@@ -23,6 +23,13 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:keepScreenOn="true">
|
android:keepScreenOn="true">
|
||||||
|
|
||||||
|
<com.google.android.material.card.MaterialCardView
|
||||||
|
android:id="@+id/polar_bar"
|
||||||
|
style="@style/TopBar"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/frame"
|
android:id="@+id/frame"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -30,7 +37,7 @@
|
|||||||
app:layout_constraintDimensionRatio="1:1"
|
app:layout_constraintDimensionRatio="1:1"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toBottomOf="@+id/polar_bar" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/azimuth"
|
android:id="@+id/azimuth"
|
||||||
@@ -76,7 +83,7 @@
|
|||||||
android:id="@+id/recycler"
|
android:id="@+id/recycler"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:paddingBottom="4dp"
|
android:padding="2dp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
@@ -92,7 +99,6 @@
|
|||||||
android:textSize="15sp"
|
android:textSize="15sp"
|
||||||
android:visibility="invisible"
|
android:visibility="invisible"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/frame" />
|
app:layout_constraintTop_toBottomOf="@+id/frame" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -19,177 +19,120 @@
|
|||||||
|
|
||||||
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
|
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:id="@+id/trans_card"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="4dp"
|
app:cardCornerRadius="0dp">
|
||||||
android:layout_marginTop="4dp"
|
|
||||||
android:layout_marginEnd="4dp"
|
|
||||||
app:cardElevation="1dp">
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/trans_description"
|
android:id="@+id/description"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="4dp"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
android:layout_marginEnd="6dp"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
android:text="@string/trans_description"
|
android:text="@string/trans_description"
|
||||||
android:textSize="15sp"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/trans_img"
|
app:layout_constraintHorizontal_chainStyle="spread_inside"
|
||||||
app:layout_constraintStart_toEndOf="@+id/trans_img"
|
app:layout_constraintStart_toEndOf="@+id/img_trans"
|
||||||
app:layout_constraintTop_toTopOf="@+id/trans_img" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/trans_downlink"
|
android:id="@+id/downlink"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/trans_down_lowHigh"
|
android:layout_marginTop="4dp"
|
||||||
android:textSize="15sp"
|
android:fontFamily="@font/digital_dismay"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
android:text="@string/trans_down_low_doppler"
|
||||||
app:layout_constraintStart_toEndOf="@+id/trans_img_downlink"
|
android:textColor="@color/themeLight"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/trans_description" />
|
android:textSize="30sp"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/img_downlink"
|
||||||
<com.google.android.material.textview.MaterialTextView
|
|
||||||
android:id="@+id/trans_uplink"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/trans_up_lowHigh"
|
|
||||||
android:textSize="15sp"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
|
||||||
app:layout_constraintStart_toEndOf="@+id/trans_img_uplink"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/trans_downlink" />
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:id="@+id/separator"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:layout_marginTop="2dp"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:background="@color/greyLight"
|
|
||||||
android:padding="15dp"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/trans_uplink" />
|
app:layout_constraintTop_toBottomOf="@+id/description" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/trans_downlink_doppler"
|
android:id="@+id/uplink"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="1dp"
|
android:fontFamily="@font/digital_dismay"
|
||||||
android:text="@string/trans_down_lowHigh_doppler"
|
android:text="@string/trans_down_low_doppler"
|
||||||
android:textSize="15sp"
|
android:textColor="@color/themeLight"
|
||||||
|
android:textSize="30sp"
|
||||||
|
app:layout_constraintBaseline_toBaselineOf="@+id/downlink"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@+id/trans_img_downlink_doppler"
|
app:layout_constraintStart_toEndOf="@+id/img_uplink" />
|
||||||
app:layout_constraintTop_toBottomOf="@+id/separator" />
|
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/trans_uplink_doppler"
|
android:id="@+id/mode"
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/trans_up_lowHigh_doppler"
|
|
||||||
android:textSize="15sp"
|
|
||||||
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" />
|
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
|
||||||
android:id="@+id/trans_mode"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="6dp"
|
android:layout_marginStart="6dp"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
android:layout_marginBottom="2dp"
|
android:layout_marginBottom="2dp"
|
||||||
android:text="@string/trans_mode"
|
android:text="@string/trans_mode"
|
||||||
android:textSize="15sp"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/isInverted"
|
||||||
|
app:layout_constraintHorizontal_chainStyle="spread_inside"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/trans_uplink_doppler" />
|
app:layout_constraintTop_toBottomOf="@+id/downlink" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/trans_inverted"
|
android:id="@+id/isInverted"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="6dp"
|
android:layout_marginEnd="6dp"
|
||||||
android:text="@string/trans_inverted"
|
android:text="@string/trans_inverted"
|
||||||
android:textSize="15sp"
|
app:layout_constraintBaseline_toBaselineOf="@+id/mode"
|
||||||
app:layout_constraintBaseline_toBaselineOf="@+id/trans_mode"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent" />
|
app:layout_constraintStart_toEndOf="@+id/mode" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/trans_img"
|
android:id="@+id/img_trans"
|
||||||
android:layout_width="20dp"
|
android:layout_width="18dp"
|
||||||
android:layout_height="20dp"
|
android:layout_height="18dp"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:layout_marginTop="4dp"
|
|
||||||
android:contentDescription="@string/placeholder"
|
android:contentDescription="@string/placeholder"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/description"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="@+id/description"
|
||||||
app:srcCompat="@drawable/ic_trans" />
|
app:srcCompat="@drawable/ic_trans" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/trans_img_downlink"
|
android:id="@+id/img_downlink"
|
||||||
android:layout_width="20dp"
|
android:layout_width="18dp"
|
||||||
android:layout_height="20dp"
|
android:layout_height="18dp"
|
||||||
android:layout_marginTop="1dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:contentDescription="@string/placeholder"
|
android:contentDescription="@string/placeholder"
|
||||||
android:rotation="180"
|
android:rotation="90"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/trans_downlink"
|
app:layout_constraintBottom_toBottomOf="@+id/downlink"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/trans_downlink"
|
app:layout_constraintEnd_toStartOf="@+id/guideline"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintTop_toTopOf="@+id/downlink"
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="@+id/trans_downlink"
|
|
||||||
app:srcCompat="@drawable/ic_arrow" />
|
app:srcCompat="@drawable/ic_arrow" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/trans_img_uplink"
|
android:id="@+id/img_uplink"
|
||||||
android:layout_width="20dp"
|
android:layout_width="18dp"
|
||||||
android:layout_height="20dp"
|
android:layout_height="18dp"
|
||||||
android:layout_marginTop="1dp"
|
android:layout_marginStart="4dp"
|
||||||
android:contentDescription="@string/placeholder"
|
android:contentDescription="@string/placeholder"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/trans_uplink"
|
android:rotation="270"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/trans_uplink"
|
app:layout_constraintBottom_toBottomOf="@+id/uplink"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
|
||||||
app:layout_constraintHorizontal_chainStyle="packed"
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="@+id/guideline"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/trans_downlink"
|
app:layout_constraintTop_toTopOf="@+id/uplink"
|
||||||
app:srcCompat="@drawable/ic_arrow" />
|
app:srcCompat="@drawable/ic_arrow" />
|
||||||
|
|
||||||
<ImageView
|
<androidx.constraintlayout.widget.Guideline
|
||||||
android:id="@+id/trans_img_downlink_doppler"
|
android:id="@+id/guideline"
|
||||||
android:layout_width="16dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="16dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="1dp"
|
android:orientation="vertical"
|
||||||
android:layout_marginEnd="2dp"
|
app:layout_constraintGuide_percent="0.5" />
|
||||||
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_trans_doppler" />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/trans_img_uplink_doppler"
|
|
||||||
android:layout_width="16dp"
|
|
||||||
android:layout_height="16dp"
|
|
||||||
android:layout_marginTop="1dp"
|
|
||||||
android:layout_marginEnd="2dp"
|
|
||||||
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_trans_doppler" />
|
|
||||||
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</com.google.android.material.card.MaterialCardView>
|
</com.google.android.material.card.MaterialCardView>
|
||||||
@@ -45,10 +45,7 @@
|
|||||||
<string name="pref_time_utc_title">Показывать время пролета по UTC</string>
|
<string name="pref_time_utc_title">Показывать время пролета по UTC</string>
|
||||||
|
|
||||||
<string name="no_mode">Модуляция: нет</string>
|
<string name="no_mode">Модуляция: нет</string>
|
||||||
<string name="no_uplink">Восход: нет</string>
|
<string name="no_downlink_doppler">нет</string>
|
||||||
<string name="no_downlink">Нисход: нет</string>
|
|
||||||
<string name="no_uplink_doppler">Тек. восход: нет</string>
|
|
||||||
<string name="no_downlink_doppler">Тек. нисход: нет</string>
|
|
||||||
<string name="no_trans">Не найдены трансиверы для этого спутника</string>
|
<string name="no_trans">Не найдены трансиверы для этого спутника</string>
|
||||||
|
|
||||||
<string name="error_updating_data">Ошибка импорта спутников</string>
|
<string name="error_updating_data">Ошибка импорта спутников</string>
|
||||||
@@ -63,14 +60,6 @@
|
|||||||
|
|
||||||
<string name="trans_mode">Модуляция: %s</string>
|
<string name="trans_mode">Модуляция: %s</string>
|
||||||
<string name="trans_inverted">Инверсия: %s</string>
|
<string name="trans_inverted">Инверсия: %s</string>
|
||||||
<string name="trans_up_low">Восход: %.4fMHz</string>
|
|
||||||
<string name="trans_up_lowHigh">Восход: %.4f - %.4fMHz</string>
|
|
||||||
<string name="trans_down_low">Нисход: %.4f MHz</string>
|
|
||||||
<string name="trans_down_lowHigh">Нисход: %.4f - %.4fMHz</string>
|
|
||||||
<string name="trans_up_low_doppler">Тек. восход: %.4fMHz</string>
|
|
||||||
<string name="trans_up_lowHigh_doppler">Тек. восход: %.4f - %.4fMHz</string>
|
|
||||||
<string name="trans_down_low_doppler">Тек. нисход: %.4fMHz</string>
|
|
||||||
<string name="trans_down_lowHigh_doppler">Тек. нисход: %.4f - %.4fMHz</string>
|
|
||||||
|
|
||||||
<string name="about_subtitle">Приложение для слежения за спутниками радио и погоды
|
<string name="about_subtitle">Приложение для слежения за спутниками радио и погоды
|
||||||
для платформы Android</string>
|
для платформы Android</string>
|
||||||
|
|||||||
@@ -22,9 +22,9 @@
|
|||||||
<color name="themeLight">#FFE082</color>
|
<color name="themeLight">#FFE082</color>
|
||||||
<color name="themeDark">#FFCA28</color>
|
<color name="themeDark">#FFCA28</color>
|
||||||
<color name="greyDark">#121212</color>
|
<color name="greyDark">#121212</color>
|
||||||
<color name="greyLight">#C0C0C0</color>
|
<color name="greyLight">#D0D0D0</color>
|
||||||
<color name="greyDivider">#808080</color>
|
<color name="greyDivider">#808080</color>
|
||||||
<color name="greySurface">#1d1d1d</color>
|
<color name="greySurface">#1e1e1e</color>
|
||||||
<!-- map colors -->
|
<!-- map colors -->
|
||||||
<color name="satTrack">#B00020</color>
|
<color name="satTrack">#B00020</color>
|
||||||
<color name="satFootprint">#26FFE082</color>
|
<color name="satFootprint">#26FFE082</color>
|
||||||
|
|||||||
@@ -46,10 +46,7 @@
|
|||||||
<string name="pref_time_utc_title">Show pass time in UTC</string>
|
<string name="pref_time_utc_title">Show pass time in UTC</string>
|
||||||
|
|
||||||
<string name="no_mode">Mode: null</string>
|
<string name="no_mode">Mode: null</string>
|
||||||
<string name="no_uplink">Uplink: null</string>
|
<string name="no_downlink_doppler">null</string>
|
||||||
<string name="no_downlink">Downlink: null</string>
|
|
||||||
<string name="no_uplink_doppler">Curr. uplink: null</string>
|
|
||||||
<string name="no_downlink_doppler">Curr. 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="error_updating_data">Error importing satellite data</string>
|
<string name="error_updating_data">Error importing satellite data</string>
|
||||||
@@ -69,17 +66,11 @@
|
|||||||
<string name="pat_osm_latLon">Lat: %.1f°, Lon: %.1f°</string>
|
<string name="pat_osm_latLon">Lat: %.1f°, Lon: %.1f°</string>
|
||||||
<string name="pat_osm_vel">Vel: %.2f km/s</string>
|
<string name="pat_osm_vel">Vel: %.2f km/s</string>
|
||||||
|
|
||||||
<string name="trans_description" translatable="false">%s</string>
|
|
||||||
<string name="trans_mode">Mode: %s</string>
|
<string name="trans_mode">Mode: %s</string>
|
||||||
<string name="trans_inverted">Inverted: %s</string>
|
<string name="trans_inverted">Inverted: %s</string>
|
||||||
<string name="trans_up_low">Uplink: %.4fMHz</string>
|
<string name="trans_description" translatable="false">%s</string>
|
||||||
<string name="trans_up_lowHigh">Uplink: %.4f - %.4fMHz</string>
|
<string name="trans_down_low_doppler" translatable="false">%.4f</string>
|
||||||
<string name="trans_down_low">Downlink: %.4fMHz</string>
|
<string name="trans_down_lowHigh_doppler" translatable="false">%.4f - %.4f</string>
|
||||||
<string name="trans_down_lowHigh">Downlink: %.4f - %.4fMHz</string>
|
|
||||||
<string name="trans_up_low_doppler">Curr. uplink: %.4fMHz</string>
|
|
||||||
<string name="trans_up_lowHigh_doppler">Curr. uplink: %.4f - %.4fMHz</string>
|
|
||||||
<string name="trans_down_low_doppler">Curr. downlink: %.4fMHz</string>
|
|
||||||
<string name="trans_down_lowHigh_doppler">Curr. downlink: %.4f - %.4fMHz</string>
|
|
||||||
|
|
||||||
<string name="about_subtitle">
|
<string name="about_subtitle">
|
||||||
Amateur radio and weather satellites passes calculator for Android</string>
|
Amateur radio and weather satellites passes calculator for Android</string>
|
||||||
|
|||||||
@@ -26,4 +26,10 @@
|
|||||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="TopBar">
|
||||||
|
<item name="android:layout_width">match_parent</item>
|
||||||
|
<item name="android:layout_height">48dp</item>
|
||||||
|
<item name="cardCornerRadius">0dp</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
Reference in new issue
Block a user