Major classes, variables and strings refactoring. Code cleanup.
This commit is contained in:
1 parent
32605496b8
commit
bb25ef8d62
34 files changed
+601
-545
No files matched your search
@@ -48,19 +48,15 @@ import javax.inject.Inject
|
||||
|
||||
class MainViewModel(application: Application) : AndroidViewModel(application) {
|
||||
|
||||
private val defValueLoc = application.getString(R.string.def_gsp_loc)
|
||||
private val defValueHours = application.getString(R.string.def_hours_ahead).toInt()
|
||||
private val defValueMinEl = application.getString(R.string.def_min_el).toDouble()
|
||||
private val defValueUpdateFreq = application.getString(R.string.def_update_freq)
|
||||
private val keyHours = application.getString(R.string.key_hours_ahead)
|
||||
private val keyMinEl = application.getString(R.string.key_min_el)
|
||||
private val keyLat = application.getString(R.string.key_lat)
|
||||
private val keyLon = application.getString(R.string.key_lon)
|
||||
private val keyAlt = application.getString(R.string.key_alt)
|
||||
private val keyDelay = application.getString(R.string.key_delay)
|
||||
private val tleMainListFileName = application.getString(R.string.tle_main_list_file_name)
|
||||
private val tleSelectionFileName = application.getString(R.string.tle_selection_file_name)
|
||||
private val app = application
|
||||
private val keyHours = application.getString(R.string.pref_hours_ahead_key)
|
||||
private val keyMinEl = application.getString(R.string.pref_min_el_key)
|
||||
private val keyLat = application.getString(R.string.pref_lat_key)
|
||||
private val keyLon = application.getString(R.string.pref_lon_key)
|
||||
private val keyAlt = application.getString(R.string.pref_alt_key)
|
||||
private val keyDelay = application.getString(R.string.pref_refresh_rate_key)
|
||||
private val tleMainListFileName = "tleFile.txt"
|
||||
private val tleSelectionFileName = "tleSelection"
|
||||
|
||||
private val _debugMessage = MutableLiveData<String>()
|
||||
val debugMessage: LiveData<String> = _debugMessage
|
||||
@@ -93,18 +89,18 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
||||
}
|
||||
|
||||
val delay: Long
|
||||
get() = preferences.getString(keyDelay, defValueUpdateFreq)!!.toLong()
|
||||
get() = preferences.getString(keyDelay, "3000")!!.toLong()
|
||||
|
||||
val hoursAhead: Int
|
||||
get() = preferences.getInt(keyHours, defValueHours)
|
||||
get() = preferences.getInt(keyHours, 8)
|
||||
|
||||
val minEl: Double
|
||||
get() = preferences.getDouble(keyMinEl, defValueMinEl)
|
||||
get() = preferences.getDouble(keyMinEl, 16.0)
|
||||
|
||||
fun setGroundStationPosition() {
|
||||
val lat = preferences.getString(keyLat, defValueLoc)!!.toDouble()
|
||||
val lon = preferences.getString(keyLon, defValueLoc)!!.toDouble()
|
||||
val alt = preferences.getString(keyAlt, defValueLoc)!!.toDouble()
|
||||
val lat = preferences.getString(keyLat, "0.0")!!.toDouble()
|
||||
val lon = preferences.getString(keyLon, "0.0")!!.toDouble()
|
||||
val alt = preferences.getString(keyAlt, "0.0")!!.toDouble()
|
||||
_gsp.postValue(GroundStationPosition(lat, lon, alt))
|
||||
}
|
||||
|
||||
@@ -193,11 +189,19 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
||||
try {
|
||||
val predictor = PassPredictor(tle, gsp.value)
|
||||
val passes = predictor.getPasses(dateNow, hoursAhead, true)
|
||||
passes.forEach { passList.add(SatPass(tle, predictor, it)) }
|
||||
passes.forEach {
|
||||
passList.add(
|
||||
SatPass(
|
||||
tle,
|
||||
predictor,
|
||||
it
|
||||
)
|
||||
)
|
||||
}
|
||||
} catch (exception: IllegalArgumentException) {
|
||||
_debugMessage.postValue("There was a problem with ${tle.name}")
|
||||
_debugMessage.postValue(app.getString(R.string.error_sat_tle))
|
||||
} catch (exception: SatNotFoundException) {
|
||||
_debugMessage.postValue("${tle.name} shall not pass")
|
||||
_debugMessage.postValue(app.getString(R.string.error_sat_wont_pass))
|
||||
}
|
||||
}
|
||||
passList.removeAll { it.pass.startTime.after(dateFuture) }
|
||||
@@ -220,7 +224,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
||||
val tleList = ObjectInputStream(tleStream).readObject()
|
||||
tleList as List<TLE>
|
||||
} catch (exception: FileNotFoundException) {
|
||||
_debugMessage.postValue("TLE file wasn't found")
|
||||
_debugMessage.postValue(app.getString(R.string.no_tle_found))
|
||||
emptyList()
|
||||
} catch (exception: IOException) {
|
||||
_debugMessage.postValue(exception.toString())
|
||||
@@ -231,7 +235,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
||||
val selectionList = ObjectInputStream(selectionStream).readObject()
|
||||
selectionList as MutableList<Int>
|
||||
} catch (exception: FileNotFoundException) {
|
||||
_debugMessage.postValue("Selection file wasn't found")
|
||||
_debugMessage.postValue(app.getString(R.string.no_selection_found))
|
||||
mutableListOf()
|
||||
} catch (exception: IOException) {
|
||||
_debugMessage.postValue(exception.toString())
|
||||
|
||||
@@ -82,7 +82,7 @@ class MainActivity : AppCompatActivity() {
|
||||
val toolbar: Toolbar = findViewById(R.id.toolbar)
|
||||
setSupportActionBar(toolbar)
|
||||
|
||||
timerLayout = findViewById(R.id.toolbar_layout_timer)
|
||||
timerLayout = findViewById(R.id.toolbar_layout)
|
||||
drawerLayout = findViewById(R.id.drawer_layout)
|
||||
drawerLat = header.findViewById(R.id.drawer_lat_value)
|
||||
drawerLon = header.findViewById(R.id.drawer_lon_value)
|
||||
@@ -93,7 +93,7 @@ class MainActivity : AppCompatActivity() {
|
||||
drawerBtnExit = header.findViewById(R.id.drawer_btn_exit)
|
||||
|
||||
appBarConfig = AppBarConfiguration(
|
||||
setOf(R.id.nav_sky, R.id.nav_map, R.id.nav_credits, R.id.nav_about),
|
||||
setOf(R.id.nav_pass_list, R.id.nav_map_view, R.id.nav_credits, R.id.nav_about),
|
||||
drawerLayout
|
||||
)
|
||||
|
||||
@@ -102,12 +102,12 @@ class MainActivity : AppCompatActivity() {
|
||||
|
||||
navController.addOnDestinationChangedListener { _, destination, _ ->
|
||||
when (destination.id) {
|
||||
R.id.nav_sky -> {
|
||||
R.id.nav_pass_list -> {
|
||||
this.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||
toolbar.visibility = View.VISIBLE
|
||||
timerLayout.visibility = View.VISIBLE
|
||||
}
|
||||
R.id.nav_map -> {
|
||||
R.id.nav_map_view -> {
|
||||
this.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
|
||||
toolbar.visibility = View.GONE
|
||||
}
|
||||
@@ -131,8 +131,8 @@ class MainActivity : AppCompatActivity() {
|
||||
})
|
||||
|
||||
viewModel.gsp.observe(this, Observer { gsp ->
|
||||
drawerLat.text = String.format(getString(R.string.pattern_location), gsp.latitude)
|
||||
drawerLon.text = String.format(getString(R.string.pattern_location), gsp.longitude)
|
||||
drawerLat.text = String.format(getString(R.string.pattern_loc), gsp.latitude)
|
||||
drawerLon.text = String.format(getString(R.string.pattern_loc), gsp.longitude)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
+13
-13
@@ -41,14 +41,14 @@ import java.util.concurrent.ScheduledExecutorService
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlin.math.abs
|
||||
|
||||
class WorldMapFragment : Fragment() {
|
||||
class MapViewFragment : Fragment() {
|
||||
|
||||
private lateinit var service: ScheduledExecutorService
|
||||
private lateinit var mainActivity: MainActivity
|
||||
private lateinit var viewModel: MainViewModel
|
||||
private lateinit var mapFrame: FrameLayout
|
||||
private lateinit var fab: FloatingActionButton
|
||||
private lateinit var trackView: TrackView
|
||||
private lateinit var mapFab: FloatingActionButton
|
||||
private lateinit var mapView: MapView
|
||||
private lateinit var predictor: PassPredictor
|
||||
private lateinit var selectedSat: TLE
|
||||
private lateinit var gsp: GroundStationPosition
|
||||
@@ -67,7 +67,7 @@ class WorldMapFragment : Fragment() {
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
return inflater.inflate(R.layout.fragment_worldmap, container, false)
|
||||
return inflater.inflate(R.layout.fragment_map_view, container, false)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
@@ -77,8 +77,8 @@ class WorldMapFragment : Fragment() {
|
||||
}
|
||||
|
||||
private fun findViews(view: View) {
|
||||
mapFrame = view.findViewById(R.id.worldmap_frame)
|
||||
fab = view.findViewById(R.id.worldmap_fab)
|
||||
mapFrame = view.findViewById(R.id.map_frame)
|
||||
mapFab = view.findViewById(R.id.map_fab)
|
||||
}
|
||||
|
||||
private fun setupComponents() {
|
||||
@@ -89,19 +89,19 @@ class WorldMapFragment : Fragment() {
|
||||
if (satPassList.isNotEmpty()) {
|
||||
satPassList = satPassList.distinctBy { it.tle }
|
||||
satPassList = satPassList.sortedBy { it.tle.name }
|
||||
fab.setOnClickListener { showSelectSatDialog(satPassList) }
|
||||
mapFab.setOnClickListener { showSelectSatDialog(satPassList) }
|
||||
selectedSat = satPassList.first().tle
|
||||
predictor = satPassList.first().predictor
|
||||
trackView = TrackView(mainActivity)
|
||||
mapFrame.addView(trackView)
|
||||
mapView = MapView(mainActivity)
|
||||
mapFrame.addView(mapView)
|
||||
service.scheduleAtFixedRate(
|
||||
{ trackView.invalidate() },
|
||||
{ mapView.invalidate() },
|
||||
delay,
|
||||
delay,
|
||||
TimeUnit.MILLISECONDS
|
||||
)
|
||||
} else {
|
||||
fab.setOnClickListener {
|
||||
mapFab.setOnClickListener {
|
||||
Toast.makeText(
|
||||
mainActivity,
|
||||
getString(R.string.no_selected_sat),
|
||||
@@ -124,14 +124,14 @@ class WorldMapFragment : Fragment() {
|
||||
checkedItem = which
|
||||
selectedSat = list[which].tle
|
||||
predictor = list[which].predictor
|
||||
trackView.invalidate()
|
||||
mapView.invalidate()
|
||||
dialog.dismiss()
|
||||
}
|
||||
.create()
|
||||
.show()
|
||||
}
|
||||
|
||||
inner class TrackView(context: Context) : View(context) {
|
||||
inner class MapView(context: Context) : View(context) {
|
||||
private val scale = resources.displayMetrics.density
|
||||
private val groundTrackPaint = Paint().apply {
|
||||
isAntiAlias = true
|
||||
+39
-34
@@ -41,18 +41,19 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
import com.rtbishop.look4sat.MainViewModel
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.repo.SatPass
|
||||
import com.rtbishop.look4sat.ui.adapters.SatPassAdapter
|
||||
import java.util.*
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class SkyFragment : Fragment() {
|
||||
class PassListFragment : Fragment() {
|
||||
|
||||
private lateinit var viewModel: MainViewModel
|
||||
private lateinit var recyclerPasses: RecyclerView
|
||||
private lateinit var recyclerAdapter: SatPassAdapter
|
||||
private lateinit var timeToAos: TextView
|
||||
private lateinit var satPassRecycler: RecyclerView
|
||||
private lateinit var satPassAdapter: SatPassAdapter
|
||||
private lateinit var btnPassPrefs: ImageButton
|
||||
private lateinit var fab: FloatingActionButton
|
||||
private lateinit var passListFab: FloatingActionButton
|
||||
private lateinit var aosTimer: CountDownTimer
|
||||
private lateinit var aosTimerText: TextView
|
||||
private lateinit var swipeLayout: SwipeRefreshLayout
|
||||
private lateinit var mainActivity: MainActivity
|
||||
private lateinit var satPassList: MutableList<SatPass>
|
||||
@@ -62,14 +63,16 @@ class SkyFragment : Fragment() {
|
||||
super.onCreate(savedInstanceState)
|
||||
mainActivity = activity as MainActivity
|
||||
viewModel = ViewModelProvider(mainActivity).get(MainViewModel::class.java)
|
||||
recyclerAdapter = SatPassAdapter()
|
||||
satPassAdapter = SatPassAdapter()
|
||||
satPassList = mutableListOf()
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
return inflater.inflate(R.layout.fragment_sky, container, false)
|
||||
return inflater.inflate(R.layout.fragment_pass_list, container, false)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
@@ -80,29 +83,29 @@ class SkyFragment : Fragment() {
|
||||
}
|
||||
|
||||
private fun findViews(view: View) {
|
||||
timeToAos = (mainActivity).findViewById(R.id.toolbar_time_to_aos)
|
||||
btnPassPrefs = (mainActivity).findViewById(R.id.toolbar_btn_refresh)
|
||||
swipeLayout = view.findViewById(R.id.swipeRefreshLayout)
|
||||
recyclerPasses = view.findViewById(R.id.sky_recycler_future)
|
||||
fab = view.findViewById(R.id.sky_fab)
|
||||
aosTimerText = (mainActivity).findViewById(R.id.toolbar_timer)
|
||||
btnPassPrefs = (mainActivity).findViewById(R.id.toolbar_filter)
|
||||
swipeLayout = view.findViewById(R.id.pass_list_refresh)
|
||||
satPassRecycler = view.findViewById(R.id.pass_list_recycler)
|
||||
passListFab = view.findViewById(R.id.pass_list_fab)
|
||||
}
|
||||
|
||||
private fun setupComponents() {
|
||||
recyclerPasses.apply {
|
||||
satPassRecycler.apply {
|
||||
layoutManager = LinearLayoutManager(mainActivity)
|
||||
adapter = recyclerAdapter
|
||||
adapter = satPassAdapter
|
||||
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
|
||||
}
|
||||
recyclerAdapter.setList(satPassList)
|
||||
satPassAdapter.setList(satPassList)
|
||||
setTimer()
|
||||
|
||||
swipeLayout.setProgressBackgroundColorSchemeResource(R.color.themeAccent)
|
||||
swipeLayout.setColorSchemeResources(R.color.darkOnLight)
|
||||
swipeLayout.setColorSchemeResources(R.color.backgroundDark)
|
||||
swipeLayout.setOnRefreshListener { calculatePasses() }
|
||||
btnPassPrefs.setOnClickListener {
|
||||
showSatPassPrefsDialog(viewModel.hoursAhead, viewModel.minEl)
|
||||
}
|
||||
fab.setOnClickListener {
|
||||
passListFab.setOnClickListener {
|
||||
showSelectSatDialog(viewModel.tleMainList, viewModel.tleSelection)
|
||||
}
|
||||
}
|
||||
@@ -110,7 +113,7 @@ class SkyFragment : Fragment() {
|
||||
private fun setupObservers() {
|
||||
viewModel.passSatList.observe(viewLifecycleOwner, Observer {
|
||||
satPassList = it
|
||||
recyclerAdapter.setList(satPassList)
|
||||
satPassAdapter.setList(satPassList)
|
||||
setTimer()
|
||||
swipeLayout.isRefreshing = false
|
||||
})
|
||||
@@ -122,14 +125,14 @@ class SkyFragment : Fragment() {
|
||||
}
|
||||
|
||||
private fun showSatPassPrefsDialog(hoursAhead: Int, minEl: Double) {
|
||||
val satPassPrefView = View.inflate(mainActivity, R.layout.sat_pass_pref, null)
|
||||
val etHoursAhead = satPassPrefView.findViewById<EditText>(R.id.pref_hours_ahead_et)
|
||||
val etMinEl = satPassPrefView.findViewById<EditText>(R.id.pref_min_el_et)
|
||||
val satPassPrefView = View.inflate(mainActivity, R.layout.dialog_pass_pref, null)
|
||||
val etHoursAhead = satPassPrefView.findViewById<EditText>(R.id.pref_et_hoursAhead)
|
||||
val etMinEl = satPassPrefView.findViewById<EditText>(R.id.pref_et_minEl)
|
||||
etHoursAhead.setText(hoursAhead.toString())
|
||||
etMinEl.setText(minEl.toString())
|
||||
|
||||
val builder = AlertDialog.Builder(mainActivity)
|
||||
builder.setTitle(getString(R.string.dialog_pass_prefs))
|
||||
builder.setTitle(getString(R.string.dialog_filter_passes))
|
||||
.setPositiveButton(getString(R.string.btn_ok)) { _, _ ->
|
||||
val hoursStr = etHoursAhead.text.toString()
|
||||
val elevationStr = etMinEl.text.toString()
|
||||
@@ -140,14 +143,14 @@ class SkyFragment : Fragment() {
|
||||
hours < 1 || hours > 168 -> {
|
||||
Toast.makeText(
|
||||
mainActivity,
|
||||
"Value should be within 1-168 hours",
|
||||
getString(R.string.pref_hours_ahead_input_error),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
elevation < 0 || elevation > 90 -> {
|
||||
Toast.makeText(
|
||||
mainActivity,
|
||||
"Value should be within 0-90 deg",
|
||||
getString(R.string.pref_min_el_input_error),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
@@ -158,7 +161,7 @@ class SkyFragment : Fragment() {
|
||||
}
|
||||
} else Toast.makeText(
|
||||
mainActivity,
|
||||
"Please, enter the value",
|
||||
getString(R.string.error_enter_value),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
|
||||
@@ -173,7 +176,8 @@ class SkyFragment : Fragment() {
|
||||
|
||||
private fun showSelectSatDialog(tleMainList: List<TLE>, selectionList: MutableList<Int>) {
|
||||
if (tleMainList.isEmpty()) {
|
||||
Toast.makeText(mainActivity, "Please, update your TLE", Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(mainActivity, getString(R.string.error_update_tle), Toast.LENGTH_SHORT)
|
||||
.show()
|
||||
} else {
|
||||
val tleNameArray = arrayOfNulls<String>(tleMainList.size).apply {
|
||||
tleMainList.withIndex().forEach { (position, tle) -> this[position] = tle.name }
|
||||
@@ -230,13 +234,13 @@ class SkyFragment : Fragment() {
|
||||
}
|
||||
|
||||
override fun onTick(millisUntilFinished: Long) {
|
||||
timeToAos.text = String.format(
|
||||
mainActivity.getString(R.string.pattern_aos),
|
||||
aosTimerText.text = String.format(
|
||||
mainActivity.getString(R.string.pattern_timer_aos),
|
||||
TimeUnit.MILLISECONDS.toHours(millisUntilFinished) % 60,
|
||||
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) % 60,
|
||||
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) % 60
|
||||
)
|
||||
recyclerAdapter.updateRecycler()
|
||||
satPassAdapter.updateRecycler()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -250,13 +254,13 @@ class SkyFragment : Fragment() {
|
||||
}
|
||||
|
||||
override fun onTick(millisUntilFinished: Long) {
|
||||
timeToAos.text = String.format(
|
||||
mainActivity.getString(R.string.pattern_los),
|
||||
aosTimerText.text = String.format(
|
||||
mainActivity.getString(R.string.pattern_timer_los),
|
||||
TimeUnit.MILLISECONDS.toHours(millisUntilFinished) % 60,
|
||||
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) % 60,
|
||||
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) % 60
|
||||
)
|
||||
recyclerAdapter.updateRecycler()
|
||||
satPassAdapter.updateRecycler()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -266,6 +270,7 @@ class SkyFragment : Fragment() {
|
||||
aosTimer.cancel()
|
||||
isTimerSet = false
|
||||
}
|
||||
if (resetToNull) timeToAos.text = String.format(getString(R.string.pattern_aos), 0, 0, 0)
|
||||
if (resetToNull) aosTimerText.text =
|
||||
String.format(getString(R.string.pattern_timer_aos), 0, 0, 0)
|
||||
}
|
||||
}
|
||||
+41
-32
@@ -39,6 +39,7 @@ import com.github.amsacode.predict4java.SatPos
|
||||
import com.rtbishop.look4sat.MainViewModel
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.repo.SatPass
|
||||
import com.rtbishop.look4sat.ui.adapters.TransmitterAdapter
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.*
|
||||
import java.util.concurrent.Executors
|
||||
@@ -46,22 +47,22 @@ import java.util.concurrent.TimeUnit
|
||||
import kotlin.math.cos
|
||||
import kotlin.math.sin
|
||||
|
||||
class RadarFragment : Fragment() {
|
||||
class PolarViewFragment : Fragment() {
|
||||
|
||||
private val service = Executors.newSingleThreadScheduledExecutor()
|
||||
private val args: RadarFragmentArgs by navArgs()
|
||||
private val args: PolarViewFragmentArgs by navArgs()
|
||||
|
||||
private lateinit var viewModel: MainViewModel
|
||||
private lateinit var satPass: SatPass
|
||||
private lateinit var radarView: RadarView
|
||||
private lateinit var radarSkyFrame: FrameLayout
|
||||
private lateinit var polarView: PolarView
|
||||
private lateinit var polarViewFrame: FrameLayout
|
||||
private lateinit var transRecycler: RecyclerView
|
||||
private lateinit var transAdapter: TransAdapter
|
||||
private lateinit var radarAzimuth: TextView
|
||||
private lateinit var radarElevation: TextView
|
||||
private lateinit var radarRange: TextView
|
||||
private lateinit var radarAltitude: TextView
|
||||
private lateinit var transNoFound: TextView
|
||||
private lateinit var transmitterAdapter: TransmitterAdapter
|
||||
private lateinit var polarAzimuth: TextView
|
||||
private lateinit var polarElevation: TextView
|
||||
private lateinit var polarRange: TextView
|
||||
private lateinit var polarAltitude: TextView
|
||||
private lateinit var noTransFound: TextView
|
||||
private lateinit var mainActivity: MainActivity
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
@@ -75,7 +76,7 @@ class RadarFragment : Fragment() {
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
return inflater.inflate(R.layout.fragment_radar, container, false)
|
||||
return inflater.inflate(R.layout.fragment_polar_view, container, false)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
@@ -84,40 +85,40 @@ class RadarFragment : Fragment() {
|
||||
satPass = args.satPass
|
||||
mainActivity.supportActionBar?.title = satPass.tle.name
|
||||
|
||||
radarSkyFrame = view.findViewById(R.id.radar_sky_frame)
|
||||
transRecycler = view.findViewById(R.id.radar_recycler)
|
||||
radarAzimuth = view.findViewById(R.id.radar_azimuth)
|
||||
radarElevation = view.findViewById(R.id.radar_elevation)
|
||||
radarRange = view.findViewById(R.id.radar_range)
|
||||
radarAltitude = view.findViewById(R.id.radar_altitude)
|
||||
transNoFound = view.findViewById(R.id.radar_no_trans)
|
||||
polarViewFrame = view.findViewById(R.id.polar_view_frame)
|
||||
transRecycler = view.findViewById(R.id.polar_recycler)
|
||||
polarAzimuth = view.findViewById(R.id.polar_azimuth)
|
||||
polarElevation = view.findViewById(R.id.polar_elevation)
|
||||
polarRange = view.findViewById(R.id.polar_range)
|
||||
polarAltitude = view.findViewById(R.id.polar_altitude)
|
||||
noTransFound = view.findViewById(R.id.polar_no_trans)
|
||||
|
||||
radarView = RadarView(mainActivity, delay)
|
||||
radarSkyFrame.addView(radarView)
|
||||
service.scheduleAtFixedRate({ radarView.invalidate() }, delay, delay, TimeUnit.MILLISECONDS)
|
||||
polarView = PolarView(mainActivity, delay)
|
||||
polarViewFrame.addView(polarView)
|
||||
service.scheduleAtFixedRate({ polarView.invalidate() }, delay, delay, TimeUnit.MILLISECONDS)
|
||||
|
||||
setupTransRecycler()
|
||||
}
|
||||
|
||||
private fun setupTransRecycler() {
|
||||
transAdapter = TransAdapter()
|
||||
transmitterAdapter = TransmitterAdapter()
|
||||
transRecycler.apply {
|
||||
layoutManager = LinearLayoutManager(mainActivity)
|
||||
adapter = transAdapter
|
||||
adapter = transmitterAdapter
|
||||
}
|
||||
lifecycleScope.launch {
|
||||
val transList = viewModel.getTransmittersForSat(satPass.tle.catnum)
|
||||
if (transList.isNotEmpty()) {
|
||||
transAdapter.setList(transList)
|
||||
transAdapter.notifyDataSetChanged()
|
||||
transmitterAdapter.setList(transList)
|
||||
transmitterAdapter.notifyDataSetChanged()
|
||||
} else {
|
||||
transRecycler.visibility = View.INVISIBLE
|
||||
transNoFound.visibility = View.VISIBLE
|
||||
noTransFound.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inner class RadarView(context: Context, updateFreq: Long) : View(context) {
|
||||
inner class PolarView(context: Context, updateFreq: Long) : View(context) {
|
||||
|
||||
private val radarSize = resources.displayMetrics.widthPixels
|
||||
private val scale = resources.displayMetrics.density
|
||||
@@ -131,7 +132,7 @@ class RadarFragment : Fragment() {
|
||||
|
||||
private val radarPaint = Paint().apply {
|
||||
isAntiAlias = true
|
||||
color = resources.getColor(R.color.lightOnDark, mainActivity.theme)
|
||||
color = resources.getColor(R.color.themeLight, mainActivity.theme)
|
||||
style = Paint.Style.STROKE
|
||||
strokeWidth = scale
|
||||
}
|
||||
@@ -168,10 +169,18 @@ class RadarFragment : Fragment() {
|
||||
|
||||
private fun setPassText() {
|
||||
satPos = satPass.predictor.getSatPos(Date())
|
||||
radarAzimuth.text = String.format("Azimuth: %.1f°", rad2Deg(satPos.azimuth))
|
||||
radarElevation.text = String.format("Elevation: %.1f°", rad2Deg(satPos.elevation))
|
||||
radarRange.text = String.format("Range: %.0f km", satPos.range)
|
||||
radarAltitude.text = String.format("Altitude: %.0f km", satPos.altitude)
|
||||
polarAzimuth.text = String.format(
|
||||
context.getString(R.string.pattern_polar_azimuth),
|
||||
rad2Deg(satPos.azimuth)
|
||||
)
|
||||
polarElevation.text = String.format(
|
||||
context.getString(R.string.pattern_polar_elev),
|
||||
rad2Deg(satPos.elevation)
|
||||
)
|
||||
polarRange.text =
|
||||
String.format(context.getString(R.string.pattern_polar_range), satPos.range)
|
||||
polarAltitude.text =
|
||||
String.format(context.getString(R.string.pattern_polar_alt), satPos.altitude)
|
||||
}
|
||||
|
||||
private fun drawRadarView(cvs: Canvas) {
|
||||
@@ -34,94 +34,112 @@ class SettingsFragment : PreferenceFragmentCompat(),
|
||||
|
||||
private lateinit var mainActivity: MainActivity
|
||||
private lateinit var viewModel: MainViewModel
|
||||
private lateinit var keyLat: String
|
||||
private lateinit var keyLon: String
|
||||
private lateinit var keyAlt: String
|
||||
private lateinit var keyDelay: String
|
||||
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
setPreferencesFromResource(R.xml.preference, rootKey)
|
||||
val provider = EditTextPreference.SimpleSummaryProvider.getInstance()
|
||||
|
||||
mainActivity = activity as MainActivity
|
||||
viewModel = ViewModelProvider(mainActivity).get(MainViewModel::class.java)
|
||||
|
||||
val provider = EditTextPreference.SimpleSummaryProvider.getInstance()
|
||||
val latPref = findPreference<EditTextPreference>(context!!.getText(R.string.key_lat))
|
||||
val lonPref = findPreference<EditTextPreference>(context!!.getText(R.string.key_lon))
|
||||
val altPref = findPreference<EditTextPreference>(context!!.getText(R.string.key_alt))
|
||||
val delayPref = findPreference<EditTextPreference>(context!!.getText(R.string.key_delay))
|
||||
keyLat = mainActivity.getString(R.string.pref_lat_key)
|
||||
keyLon = mainActivity.getString(R.string.pref_lon_key)
|
||||
keyAlt = mainActivity.getString(R.string.pref_alt_key)
|
||||
keyDelay = mainActivity.getString(R.string.pref_refresh_rate_key)
|
||||
|
||||
latPref?.summaryProvider = provider
|
||||
lonPref?.summaryProvider = provider
|
||||
altPref?.summaryProvider = provider
|
||||
delayPref?.summaryProvider = provider
|
||||
findPreference<EditTextPreference>(keyLat)?.apply {
|
||||
summaryProvider = provider
|
||||
|
||||
latPref?.setOnBindEditTextListener {
|
||||
it.inputType = InputType.TYPE_CLASS_NUMBER or
|
||||
InputType.TYPE_NUMBER_FLAG_DECIMAL or
|
||||
InputType.TYPE_NUMBER_FLAG_SIGNED
|
||||
}
|
||||
latPref?.setOnPreferenceChangeListener { _, newValue ->
|
||||
if (newValue.toString().isEmpty() || newValue.toString().toDouble() < -90.0 || newValue.toString().toDouble() > 90.0) {
|
||||
Toast.makeText(
|
||||
mainActivity,
|
||||
getString(R.string.pref_lat_input_error),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
return@setOnPreferenceChangeListener false
|
||||
setOnBindEditTextListener {
|
||||
it.inputType = InputType.TYPE_CLASS_NUMBER or
|
||||
InputType.TYPE_NUMBER_FLAG_DECIMAL or
|
||||
InputType.TYPE_NUMBER_FLAG_SIGNED
|
||||
}
|
||||
|
||||
setOnPreferenceChangeListener { _, newValue ->
|
||||
val valueStr = newValue.toString()
|
||||
if (valueStr.isEmpty() || valueStr == "-" || valueStr.toDouble() < -90.0 || valueStr.toDouble() > 90.0) {
|
||||
Toast.makeText(
|
||||
mainActivity,
|
||||
getString(R.string.pref_lat_input_error),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
return@setOnPreferenceChangeListener false
|
||||
}
|
||||
return@setOnPreferenceChangeListener true
|
||||
}
|
||||
return@setOnPreferenceChangeListener true
|
||||
}
|
||||
|
||||
lonPref?.setOnBindEditTextListener {
|
||||
it.inputType = InputType.TYPE_CLASS_NUMBER or
|
||||
InputType.TYPE_NUMBER_FLAG_DECIMAL or
|
||||
InputType.TYPE_NUMBER_FLAG_SIGNED
|
||||
}
|
||||
lonPref?.setOnPreferenceChangeListener { _, newValue ->
|
||||
if (newValue.toString().isEmpty() || newValue.toString().toDouble() < -180.0 || newValue.toString().toDouble() > 180.0) {
|
||||
Toast.makeText(
|
||||
mainActivity,
|
||||
getString(R.string.pref_lon_input_error),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
return@setOnPreferenceChangeListener false
|
||||
}
|
||||
return@setOnPreferenceChangeListener true
|
||||
}
|
||||
findPreference<EditTextPreference>(keyLon)?.apply {
|
||||
summaryProvider = provider
|
||||
|
||||
altPref?.setOnBindEditTextListener {
|
||||
it.inputType = InputType.TYPE_CLASS_NUMBER or
|
||||
InputType.TYPE_NUMBER_FLAG_DECIMAL or
|
||||
InputType.TYPE_NUMBER_FLAG_SIGNED
|
||||
}
|
||||
altPref?.setOnPreferenceChangeListener { _, newValue ->
|
||||
if (newValue.toString().isEmpty() || newValue.toString().toDouble() < -413.0 || newValue.toString().toDouble() > 8850.0) {
|
||||
Toast.makeText(
|
||||
mainActivity,
|
||||
getString(R.string.pref_alt_input_error),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
return@setOnPreferenceChangeListener false
|
||||
setOnBindEditTextListener {
|
||||
it.inputType = InputType.TYPE_CLASS_NUMBER or
|
||||
InputType.TYPE_NUMBER_FLAG_DECIMAL or
|
||||
InputType.TYPE_NUMBER_FLAG_SIGNED
|
||||
}
|
||||
return@setOnPreferenceChangeListener true
|
||||
}
|
||||
|
||||
delayPref?.setOnBindEditTextListener { it.inputType = InputType.TYPE_CLASS_NUMBER }
|
||||
delayPref?.setOnPreferenceChangeListener { _, newValue ->
|
||||
if (newValue.toString().isEmpty() || newValue.toString().toLong() < 250 || newValue.toString().toLong() > 10000) {
|
||||
Toast.makeText(
|
||||
mainActivity,
|
||||
getString(R.string.pref_update_freq_input_error),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
return@setOnPreferenceChangeListener false
|
||||
setOnPreferenceChangeListener { _, newValue ->
|
||||
val valueStr = newValue.toString()
|
||||
if (valueStr.isEmpty() || valueStr == "-" || valueStr.toDouble() < -180.0 || valueStr.toDouble() > 180.0) {
|
||||
Toast.makeText(
|
||||
mainActivity,
|
||||
getString(R.string.pref_lon_input_error),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
return@setOnPreferenceChangeListener false
|
||||
}
|
||||
return@setOnPreferenceChangeListener true
|
||||
}
|
||||
}
|
||||
findPreference<EditTextPreference>(keyAlt)?.apply {
|
||||
summaryProvider = provider
|
||||
|
||||
setOnBindEditTextListener {
|
||||
it.inputType = InputType.TYPE_CLASS_NUMBER or
|
||||
InputType.TYPE_NUMBER_FLAG_DECIMAL or
|
||||
InputType.TYPE_NUMBER_FLAG_SIGNED
|
||||
}
|
||||
|
||||
setOnPreferenceChangeListener { _, newValue ->
|
||||
val valueStr = newValue.toString()
|
||||
if (valueStr.isEmpty() || valueStr == "-" || valueStr.toDouble() < -413.0 || valueStr.toDouble() > 8850.0) {
|
||||
Toast.makeText(
|
||||
mainActivity,
|
||||
getString(R.string.pref_alt_input_error),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
return@setOnPreferenceChangeListener false
|
||||
}
|
||||
return@setOnPreferenceChangeListener true
|
||||
}
|
||||
}
|
||||
findPreference<EditTextPreference>(keyDelay)?.apply {
|
||||
summaryProvider = provider
|
||||
|
||||
setOnBindEditTextListener { it.inputType = InputType.TYPE_CLASS_NUMBER }
|
||||
|
||||
setOnPreferenceChangeListener { _, newValue ->
|
||||
val valueStr = newValue.toString()
|
||||
if (valueStr.isEmpty() || valueStr.toLong() < 250 || valueStr.toLong() > 10000) {
|
||||
Toast.makeText(
|
||||
mainActivity,
|
||||
getString(R.string.pref_refresh_rate_input_error),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
return@setOnPreferenceChangeListener false
|
||||
}
|
||||
return@setOnPreferenceChangeListener true
|
||||
}
|
||||
return@setOnPreferenceChangeListener true
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
||||
if (key == context!!.getText(R.string.key_lat) ||
|
||||
key == context!!.getText(R.string.key_lon) ||
|
||||
key == context!!.getText(R.string.key_alt)
|
||||
) viewModel.setGroundStationPosition()
|
||||
if (key == keyLat || key == keyLon || key == keyAlt) viewModel.setGroundStationPosition()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
/*
|
||||
* LookingSat. Amateur radio & weather satellite tracker and passes calculator.
|
||||
* Copyright (C) 2019 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.
|
||||
*/
|
||||
|
||||
package com.rtbishop.look4sat.ui
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.repo.Transmitter
|
||||
|
||||
class TransAdapter : RecyclerView.Adapter<TransAdapter.TransHolder>() {
|
||||
|
||||
inner class TransHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
|
||||
|
||||
private var transList = emptyList<Transmitter>()
|
||||
|
||||
fun setList(list: List<Transmitter>) {
|
||||
transList = list
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return transList.size
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TransHolder {
|
||||
val itemView = LayoutInflater
|
||||
.from(parent.context)
|
||||
.inflate(R.layout.card_transmitter, parent, false)
|
||||
return TransHolder(itemView)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: TransHolder, position: Int) {
|
||||
val context = holder.itemView.context
|
||||
val freqDivider = 1000000f
|
||||
val transmitter = transList[position]
|
||||
val description = holder.itemView.findViewById<TextView>(R.id.trans_description)
|
||||
val downlink = holder.itemView.findViewById<TextView>(R.id.trans_downlink)
|
||||
val uplink = holder.itemView.findViewById<TextView>(R.id.trans_uplink)
|
||||
val mode = holder.itemView.findViewById<TextView>(R.id.trans_mode)
|
||||
val inverted = holder.itemView.findViewById<TextView>(R.id.trans_inverted)
|
||||
|
||||
description.text = transmitter.description
|
||||
|
||||
if (transmitter.downlinkLow != null && transmitter.downlinkHigh == null) {
|
||||
downlink.text = String.format(
|
||||
context.getString(R.string.pattern_trans_downlink_low),
|
||||
transmitter.downlinkLow / freqDivider
|
||||
)
|
||||
} else if (transmitter.downlinkLow != null && transmitter.downlinkHigh != null) {
|
||||
downlink.text = String.format(
|
||||
context.getString(R.string.pattern_trans_downlink_lowHigh),
|
||||
transmitter.downlinkLow / freqDivider,
|
||||
transmitter.downlinkHigh / freqDivider
|
||||
)
|
||||
} else {
|
||||
downlink.text = context.getString(R.string.no_downlink)
|
||||
}
|
||||
|
||||
if (transmitter.uplinkLow != null && transmitter.uplinkHigh == null) {
|
||||
uplink.text = String.format(
|
||||
context.getString(R.string.pattern_trans_uplink_low),
|
||||
transmitter.uplinkLow / freqDivider
|
||||
)
|
||||
} else if (transmitter.uplinkLow != null && transmitter.uplinkHigh != null) {
|
||||
uplink.text = String.format(
|
||||
context.getString(R.string.pattern_trans_uplink_lowHigh),
|
||||
transmitter.uplinkLow / freqDivider,
|
||||
transmitter.uplinkHigh / freqDivider
|
||||
)
|
||||
} else {
|
||||
uplink.text = context.getString(R.string.no_uplink)
|
||||
}
|
||||
|
||||
if (transmitter.mode != null) {
|
||||
mode.text =
|
||||
String.format(context.getString(R.string.pattern_trans_mode), transmitter.mode)
|
||||
} else {
|
||||
mode.text = context.getString(R.string.no_mode)
|
||||
}
|
||||
if (transmitter.isInverted) {
|
||||
inverted.text = String.format(
|
||||
context.getString(R.string.pattern_trans_inverted),
|
||||
context.getString(R.string.btn_yes)
|
||||
)
|
||||
} else {
|
||||
inverted.text = String.format(
|
||||
context.getString(R.string.pattern_trans_inverted),
|
||||
context.getString(R.string.btn_no)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
+33
-20
@@ -17,8 +17,9 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
package com.rtbishop.look4sat.ui
|
||||
package com.rtbishop.look4sat.ui.adapters
|
||||
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
@@ -28,10 +29,11 @@ import androidx.navigation.findNavController
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
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<SatPassAdapter.PassHolder>() {
|
||||
class SatPassAdapter : RecyclerView.Adapter<SatPassAdapter.SatPassHolder>() {
|
||||
|
||||
private var satPassList = mutableListOf<SatPass>()
|
||||
|
||||
@@ -67,43 +69,54 @@ class SatPassAdapter : RecyclerView.Adapter<SatPassAdapter.PassHolder>() {
|
||||
return satPassList.size
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PassHolder {
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SatPassHolder {
|
||||
val itemView = LayoutInflater
|
||||
.from(parent.context)
|
||||
.inflate(R.layout.card_pass, parent, false)
|
||||
return PassHolder(itemView)
|
||||
return SatPassHolder(itemView)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: PassHolder, position: Int) {
|
||||
override fun onBindViewHolder(holder: SatPassHolder, position: Int) {
|
||||
holder.bind(satPassList[position])
|
||||
}
|
||||
|
||||
inner class PassHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
inner class SatPassHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
|
||||
private val context: Context = itemView.context
|
||||
private val satName = itemView.findViewById<TextView>(R.id.pass_satName)
|
||||
private val satId = itemView.findViewById<TextView>(R.id.pass_satId)
|
||||
private val maxEl = itemView.findViewById<TextView>(R.id.pass_maxEl)
|
||||
private val passVector = itemView.findViewById<TextView>(R.id.pass_azVector)
|
||||
private val passStart = itemView.findViewById<TextView>(R.id.pass_aosTime)
|
||||
private val passEnd = itemView.findViewById<TextView>(R.id.pass_losTime)
|
||||
private val azimuth = itemView.findViewById<TextView>(R.id.pass_azimuth)
|
||||
private val aosTime = itemView.findViewById<TextView>(R.id.pass_aosTime)
|
||||
private val losTime = itemView.findViewById<TextView>(R.id.pass_losTime)
|
||||
private var progressBar = itemView.findViewById<ProgressBar>(R.id.pass_progress)
|
||||
|
||||
fun bind(satPass: SatPass) {
|
||||
val aosTime =
|
||||
SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(satPass.pass.startTime)
|
||||
val losTime =
|
||||
SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(satPass.pass.endTime)
|
||||
val aos = SimpleDateFormat(
|
||||
context.getString(R.string.pattern_time),
|
||||
Locale.getDefault()
|
||||
).format(satPass.pass.startTime)
|
||||
val los = SimpleDateFormat(
|
||||
context.getString(R.string.pattern_time),
|
||||
Locale.getDefault()
|
||||
).format(satPass.pass.endTime)
|
||||
|
||||
satName.text = satPass.tle.name
|
||||
satId.text = String.format("Id: %d", satPass.tle.catnum)
|
||||
maxEl.text = String.format("MaxEl: %.1f°", satPass.pass.maxEl)
|
||||
passVector.text =
|
||||
String.format("Az: %2d° -> %2d°", satPass.pass.aosAzimuth, satPass.pass.losAzimuth)
|
||||
passStart.text = String.format("AOS - %s", aosTime)
|
||||
passEnd.text = String.format("LOS - %s", losTime)
|
||||
satId.text =
|
||||
String.format(context.getString(R.string.pattern_pass_satId), satPass.tle.catnum)
|
||||
maxEl.text =
|
||||
String.format(context.getString(R.string.pattern_pass_maxEl), satPass.pass.maxEl)
|
||||
azimuth.text = String.format(
|
||||
context.getString(R.string.pattern_pass_azimuth),
|
||||
satPass.pass.aosAzimuth,
|
||||
satPass.pass.losAzimuth
|
||||
)
|
||||
aosTime.text = String.format(context.getString(R.string.pattern_pass_aos), aos)
|
||||
losTime.text = String.format(context.getString(R.string.pattern_pass_los), los)
|
||||
progressBar.progress = satPass.progress
|
||||
|
||||
itemView.setOnClickListener {
|
||||
val action = SkyFragmentDirections.actionNavSkyToNavRadar(satPass)
|
||||
val action = PassListFragmentDirections.actionPassToPolar(satPass)
|
||||
itemView.findNavController().navigate(action)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
/*
|
||||
* LookingSat. Amateur radio & weather satellite tracker and passes calculator.
|
||||
* Copyright (C) 2019 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.
|
||||
*/
|
||||
|
||||
package com.rtbishop.look4sat.ui.adapters
|
||||
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.repo.Transmitter
|
||||
|
||||
class TransmitterAdapter : RecyclerView.Adapter<TransmitterAdapter.TransmitterHolder>() {
|
||||
|
||||
private var transmittersList = emptyList<Transmitter>()
|
||||
|
||||
fun setList(list: List<Transmitter>) {
|
||||
transmittersList = list
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return transmittersList.size
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TransmitterHolder {
|
||||
val itemView = LayoutInflater
|
||||
.from(parent.context)
|
||||
.inflate(R.layout.card_trans, parent, false)
|
||||
return TransmitterHolder(itemView)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: TransmitterHolder, position: Int) {
|
||||
holder.bind(transmittersList[position])
|
||||
}
|
||||
|
||||
inner class TransmitterHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
|
||||
private val context: Context = itemView.context
|
||||
private val description = itemView.findViewById<TextView>(R.id.trans_description)
|
||||
private val downlink = itemView.findViewById<TextView>(R.id.trans_downlink)
|
||||
private val uplink = itemView.findViewById<TextView>(R.id.trans_uplink)
|
||||
private val mode = itemView.findViewById<TextView>(R.id.trans_mode)
|
||||
private val inverted = itemView.findViewById<TextView>(R.id.trans_inverted)
|
||||
private val freqDivider = 1000000f
|
||||
|
||||
fun bind(transmitter: Transmitter) {
|
||||
description.text = transmitter.description
|
||||
|
||||
if (transmitter.downlinkLow != null && transmitter.downlinkHigh == null) {
|
||||
downlink.text = String.format(
|
||||
context.getString(R.string.pattern_trans_down_low),
|
||||
transmitter.downlinkLow / freqDivider
|
||||
)
|
||||
} else if (transmitter.downlinkLow != null && transmitter.downlinkHigh != null) {
|
||||
downlink.text = String.format(
|
||||
context.getString(R.string.pattern_trans_down_lowHigh),
|
||||
transmitter.downlinkLow / freqDivider,
|
||||
transmitter.downlinkHigh / freqDivider
|
||||
)
|
||||
} else {
|
||||
downlink.text = context.getString(R.string.no_downlink)
|
||||
}
|
||||
|
||||
if (transmitter.uplinkLow != null && transmitter.uplinkHigh == null) {
|
||||
uplink.text = String.format(
|
||||
context.getString(R.string.pattern_trans_up_low),
|
||||
transmitter.uplinkLow / freqDivider
|
||||
)
|
||||
} else if (transmitter.uplinkLow != null && transmitter.uplinkHigh != null) {
|
||||
uplink.text = String.format(
|
||||
context.getString(R.string.pattern_trans_up_lowHigh),
|
||||
transmitter.uplinkLow / freqDivider,
|
||||
transmitter.uplinkHigh / freqDivider
|
||||
)
|
||||
} else {
|
||||
uplink.text = context.getString(R.string.no_uplink)
|
||||
}
|
||||
|
||||
if (transmitter.mode != null) {
|
||||
mode.text =
|
||||
String.format(context.getString(R.string.pattern_trans_mode), transmitter.mode)
|
||||
} else {
|
||||
mode.text = context.getString(R.string.no_mode)
|
||||
}
|
||||
if (transmitter.isInverted) {
|
||||
inverted.text = String.format(
|
||||
context.getString(R.string.pattern_trans_invert),
|
||||
context.getString(R.string.btn_yes)
|
||||
)
|
||||
} else {
|
||||
inverted.text = String.format(
|
||||
context.getString(R.string.pattern_trans_invert),
|
||||
context.getString(R.string.btn_no)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File renamed without changes.
@@ -5,5 +5,5 @@
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#C0C0C0"
|
||||
android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z" />
|
||||
android:pathData="M10,18h4v-2h-4v2zM3,6v2h18L21,6L3,6zM6,13h12v-2L6,11v2z" />
|
||||
</vector>
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:opacity="opaque">
|
||||
<item android:drawable="@color/darkOnLight" />
|
||||
<item android:drawable="@drawable/launcher_background" />
|
||||
<item
|
||||
android:width="240dp"
|
||||
android:height="240dp"
|
||||
|
||||
File renamed without changes.
File renamed without changes.
@@ -17,21 +17,21 @@
|
||||
app:titleTextColor="@color/themeAccent">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/toolbar_layout_timer"
|
||||
android:id="@+id/toolbar_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/toolbar_time_to_aos"
|
||||
android:id="@+id/toolbar_timer"
|
||||
style="@style/ToolbarText"
|
||||
android:layout_marginEnd="16dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/toolbar_btn_refresh"
|
||||
app:layout_constraintEnd_toStartOf="@+id/toolbar_filter"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/toolbar_btn_refresh"
|
||||
android:id="@+id/toolbar_filter"
|
||||
style="@style/ToolbarButton"
|
||||
android:contentDescription="@string/placeholder"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/card_pass"
|
||||
style="@style/CardPass"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="4dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginEnd="4dp"
|
||||
@@ -15,7 +16,7 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/pass_satName"
|
||||
style="@style/CardPass.SatName"
|
||||
style="@style/CardPassName"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
@@ -26,30 +27,29 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/pass_satId"
|
||||
style="@style/CardPass.SideText"
|
||||
style="@style/CardPassText"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:text="@string/pass_satId"
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_satName"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/pass_azVector"
|
||||
style="@style/CardPass.SideText"
|
||||
android:layout_width="wrap_content"
|
||||
android:text="@string/pass_azVector"
|
||||
android:id="@+id/pass_azimuth"
|
||||
style="@style/CardPassText"
|
||||
android:text="@string/pass_azimuth"
|
||||
app:layout_constraintStart_toStartOf="@+id/pass_satName"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pass_satName" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/pass_maxEl"
|
||||
style="@style/CardPass.SideText"
|
||||
style="@style/CardPassText"
|
||||
android:text="@string/pass_maxEl"
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_azVector"
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_azimuth"
|
||||
app:layout_constraintEnd_toEndOf="@+id/pass_satId" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/pass_aosTime"
|
||||
style="@style/CardPass.SideText"
|
||||
style="@style/CardPassText"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:text="@string/pass_aosTime"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/pass_losTime"
|
||||
style="@style/CardPass.SideText"
|
||||
style="@style/CardPassText"
|
||||
android:text="@string/pass_losTime"
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_aosTime"
|
||||
app:layout_constraintEnd_toEndOf="@+id/pass_progress" />
|
||||
@@ -69,8 +69,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintEnd_toEndOf="@+id/pass_maxEl"
|
||||
app:layout_constraintStart_toStartOf="@+id/pass_azVector"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pass_azVector" />
|
||||
app:layout_constraintStart_toStartOf="@+id/pass_azimuth"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pass_azimuth" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
File renamed without changes.
+18
-16
@@ -2,48 +2,50 @@
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/pass_pref_root"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/pref_hours_ahead_tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:id="@+id/pref_tv_hoursAhead"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginEnd="24dp"
|
||||
android:text="@string/pref_hours_ahead_summary"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/pref_hours_ahead_et"
|
||||
android:id="@+id/pref_et_hoursAhead"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/pref_hours_ahead_hint"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
app:layout_constraintEnd_toEndOf="@+id/pref_hours_ahead_tv"
|
||||
app:layout_constraintStart_toStartOf="@+id/pref_hours_ahead_tv"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pref_hours_ahead_tv" />
|
||||
app:layout_constraintEnd_toEndOf="@+id/pref_tv_hoursAhead"
|
||||
app:layout_constraintStart_toStartOf="@+id/pref_tv_hoursAhead"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pref_tv_hoursAhead" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/pref_min_el_tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:id="@+id/pref_tv_minEl"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="@string/pref_min_el_summary"
|
||||
app:layout_constraintEnd_toEndOf="@+id/pref_hours_ahead_et"
|
||||
app:layout_constraintStart_toStartOf="@+id/pref_hours_ahead_et"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pref_hours_ahead_et" />
|
||||
app:layout_constraintEnd_toEndOf="@+id/pref_et_hoursAhead"
|
||||
app:layout_constraintStart_toStartOf="@+id/pref_et_hoursAhead"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pref_et_hoursAhead" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/pref_min_el_et"
|
||||
android:id="@+id/pref_et_minEl"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/pref_min_el_hint"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number|numberDecimal"
|
||||
app:layout_constraintEnd_toEndOf="@+id/pref_min_el_tv"
|
||||
app:layout_constraintStart_toStartOf="@+id/pref_min_el_tv"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pref_min_el_tv" />
|
||||
app:layout_constraintEnd_toEndOf="@+id/pref_tv_minEl"
|
||||
app:layout_constraintStart_toStartOf="@+id/pref_tv_minEl"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pref_tv_minEl" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -23,7 +23,7 @@
|
||||
android:id="@+id/drawer_title"
|
||||
style="@style/DrawerHeader.Title"
|
||||
android:layout_marginStart="8dp"
|
||||
android:text="@string/title"
|
||||
android:text="@string/drawer_title"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/drawer_sat_img"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/drawer_sat_img" />
|
||||
@@ -31,7 +31,7 @@
|
||||
<TextView
|
||||
android:id="@+id/drawer_lat"
|
||||
style="@style/DrawerHeader.Item"
|
||||
android:text="@string/drawer_latitude"
|
||||
android:text="@string/drawer_lat"
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/drawer_lat_value"
|
||||
app:layout_constraintStart_toStartOf="@+id/drawer_title" />
|
||||
|
||||
@@ -40,14 +40,14 @@
|
||||
style="@style/DrawerHeader.ItemValue"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:text="@string/drawer_latitude_value"
|
||||
android:text="@string/drawer_lat_value"
|
||||
app:layout_constraintStart_toEndOf="@+id/drawer_lat"
|
||||
app:layout_constraintTop_toBottomOf="@+id/drawer_sat_img" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/drawer_lon"
|
||||
style="@style/DrawerHeader.Item"
|
||||
android:text="@string/drawer_longitude"
|
||||
android:text="@string/drawer_lon"
|
||||
app:layout_constraintStart_toStartOf="@+id/drawer_lat"
|
||||
app:layout_constraintTop_toBottomOf="@+id/drawer_lat" />
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
android:id="@+id/drawer_lon_value"
|
||||
style="@style/DrawerHeader.ItemValue"
|
||||
android:layout_marginStart="8dp"
|
||||
android:text="@string/drawer_longitude_value"
|
||||
android:text="@string/drawer_lon_value"
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/drawer_lon"
|
||||
app:layout_constraintStart_toEndOf="@+id/drawer_lon" />
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:contentDescription="@string/placeholder"
|
||||
android:src="@drawable/ic_location"
|
||||
android:src="@drawable/ic_update_loc"
|
||||
app:layout_constraintBottom_toTopOf="@+id/drawer_btn_tle"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/drawer_lon_value" />
|
||||
@@ -74,7 +74,7 @@
|
||||
android:id="@+id/drawer_tv_loc"
|
||||
style="@style/DrawerHeader.ButtonText"
|
||||
android:layout_marginStart="8dp"
|
||||
android:text="@string/update_location"
|
||||
android:text="@string/update_loc"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/drawer_btn_loc"
|
||||
app:layout_constraintStart_toEndOf="@+id/drawer_btn_loc"
|
||||
app:layout_constraintTop_toTopOf="@+id/drawer_btn_loc" />
|
||||
@@ -83,7 +83,7 @@
|
||||
android:id="@+id/drawer_btn_tle"
|
||||
style="@style/DrawerHeader.Button"
|
||||
android:contentDescription="@string/placeholder"
|
||||
android:src="@drawable/ic_tle"
|
||||
android:src="@drawable/ic_update_tle"
|
||||
app:layout_constraintBottom_toTopOf="@+id/drawer_btn_trans"
|
||||
app:layout_constraintStart_toStartOf="@+id/drawer_btn_loc"
|
||||
app:layout_constraintTop_toBottomOf="@+id/drawer_btn_loc" />
|
||||
@@ -100,7 +100,7 @@
|
||||
android:id="@+id/drawer_btn_trans"
|
||||
style="@style/DrawerHeader.Button"
|
||||
android:contentDescription="@string/placeholder"
|
||||
android:src="@drawable/ic_trans"
|
||||
android:src="@drawable/ic_update_trans"
|
||||
app:layout_constraintBottom_toTopOf="@+id/drawer_btn_github"
|
||||
app:layout_constraintStart_toStartOf="@+id/drawer_btn_tle"
|
||||
app:layout_constraintTop_toBottomOf="@+id/drawer_btn_tle" />
|
||||
@@ -108,7 +108,7 @@
|
||||
<TextView
|
||||
android:id="@+id/drawer_tv_trans"
|
||||
style="@style/DrawerHeader.ButtonText"
|
||||
android:text="@string/update_transmitters"
|
||||
android:text="@string/update_trans"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/drawer_btn_trans"
|
||||
app:layout_constraintStart_toStartOf="@+id/drawer_tv_tle"
|
||||
app:layout_constraintTop_toBottomOf="@+id/drawer_btn_tle" />
|
||||
@@ -118,7 +118,7 @@
|
||||
style="@style/DrawerHeader.Button"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:contentDescription="@string/placeholder"
|
||||
android:src="@drawable/ic_github"
|
||||
android:src="@drawable/ic_goto_github"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="@+id/drawer_btn_trans"
|
||||
app:layout_constraintTop_toBottomOf="@+id/drawer_btn_trans" />
|
||||
@@ -126,7 +126,7 @@
|
||||
<TextView
|
||||
android:id="@+id/drawer_tv_github"
|
||||
style="@style/DrawerHeader.ButtonText"
|
||||
android:text="@string/github"
|
||||
android:text="@string/goto_github"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/drawer_btn_github"
|
||||
app:layout_constraintStart_toStartOf="@+id/drawer_tv_trans"
|
||||
app:layout_constraintTop_toBottomOf="@+id/drawer_btn_trans" />
|
||||
@@ -136,7 +136,7 @@
|
||||
style="@style/DrawerHeader.Button"
|
||||
android:layout_marginStart="8dp"
|
||||
android:contentDescription="@string/placeholder"
|
||||
android:src="@drawable/ic_exit"
|
||||
android:src="@drawable/ic_exit_app"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/drawer_btn_github"
|
||||
app:layout_constraintStart_toEndOf="@+id/drawer_tv_github"
|
||||
app:layout_constraintTop_toTopOf="@+id/drawer_btn_github" />
|
||||
@@ -145,7 +145,7 @@
|
||||
android:id="@+id/drawer_tv_exit"
|
||||
style="@style/DrawerHeader.ButtonText"
|
||||
android:layout_marginStart="8dp"
|
||||
android:text="@string/exit"
|
||||
android:text="@string/exit_app"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/drawer_btn_exit"
|
||||
app:layout_constraintStart_toEndOf="@+id/drawer_btn_exit"
|
||||
app:layout_constraintTop_toTopOf="@+id/drawer_btn_exit" />
|
||||
|
||||
+6
-6
@@ -4,25 +4,25 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".ui.WorldMapFragment">
|
||||
tools:context=".ui.MapViewFragment">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/worldmap_frame"
|
||||
android:id="@+id/map_frame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/worldmap_night"
|
||||
android:background="@drawable/worldmap_dark"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/worldmap_fab"
|
||||
android:id="@+id/map_fab"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|start"
|
||||
android:layout_marginStart="@dimen/fab_margin"
|
||||
android:layout_marginBottom="@dimen/fab_margin"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:srcCompat="@drawable/ic_sat_asc_right" />
|
||||
+5
-5
@@ -5,12 +5,12 @@
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
android:id="@+id/swipeRefreshLayout"
|
||||
android:id="@+id/pass_list_refresh"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/sky_recycler_future"
|
||||
android:id="@+id/pass_list_recycler"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
@@ -21,12 +21,12 @@
|
||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/sky_fab"
|
||||
android:id="@+id/pass_list_fab"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:layout_marginEnd="@dimen/fab_margin"
|
||||
android:layout_marginBottom="@dimen/fab_margin"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:srcCompat="@drawable/ic_sat_asc_left" />
|
||||
+26
-26
@@ -4,10 +4,10 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".ui.RadarFragment">
|
||||
tools:context=".ui.PolarViewFragment">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/radar_sky_frame"
|
||||
android:id="@+id/polar_view_frame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
app:layout_constraintDimensionRatio="1:1"
|
||||
@@ -16,54 +16,54 @@
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_azimuth"
|
||||
style="@style/RadarText"
|
||||
android:id="@+id/polar_azimuth"
|
||||
style="@style/PolarViewText"
|
||||
android:layout_marginStart="4dp"
|
||||
android:text="@string/radar_azimuth"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/radar_sky_frame"
|
||||
app:layout_constraintStart_toStartOf="@+id/radar_sky_frame" />
|
||||
android:text="@string/polar_azimuth"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/polar_view_frame"
|
||||
app:layout_constraintStart_toStartOf="@+id/polar_view_frame" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_elevation"
|
||||
style="@style/RadarText"
|
||||
android:id="@+id/polar_elevation"
|
||||
style="@style/PolarViewText"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:text="@string/radar_elevation"
|
||||
android:text="@string/polar_elevation"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/radar_sky_frame" />
|
||||
app:layout_constraintTop_toTopOf="@+id/polar_view_frame" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_altitude"
|
||||
style="@style/RadarText"
|
||||
android:id="@+id/polar_altitude"
|
||||
style="@style/PolarViewText"
|
||||
android:layout_marginStart="4dp"
|
||||
android:text="@string/radar_altitude"
|
||||
android:text="@string/polar_altitude"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/radar_sky_frame" />
|
||||
app:layout_constraintTop_toTopOf="@+id/polar_view_frame" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_range"
|
||||
style="@style/RadarText"
|
||||
android:id="@+id/polar_range"
|
||||
style="@style/PolarViewText"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:text="@string/radar_range"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/radar_sky_frame"
|
||||
app:layout_constraintEnd_toEndOf="@+id/radar_sky_frame" />
|
||||
android:text="@string/polar_range"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/polar_view_frame"
|
||||
app:layout_constraintEnd_toEndOf="@+id/polar_view_frame" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/radar_recycler"
|
||||
android:id="@+id/polar_recycler"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/radar_sky_frame" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/polar_view_frame" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_no_trans"
|
||||
style="@style/RadarText"
|
||||
android:id="@+id/polar_no_trans"
|
||||
style="@style/PolarViewText"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="@string/no_trans"
|
||||
android:text="@string/no_transmitters"
|
||||
android:visibility="invisible"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/radar_sky_frame" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/polar_view_frame" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -5,13 +5,13 @@
|
||||
|
||||
<group android:checkableBehavior="single">
|
||||
<item
|
||||
android:id="@+id/nav_sky"
|
||||
android:id="@+id/nav_pass_list"
|
||||
android:icon="@drawable/ic_sat_asc_right"
|
||||
android:title="@string/menu_sky" />
|
||||
android:title="@string/menu_pass_list" />
|
||||
<item
|
||||
android:id="@+id/nav_map"
|
||||
android:icon="@drawable/ic_map"
|
||||
android:title="@string/menu_map" />
|
||||
android:id="@+id/nav_map_view"
|
||||
android:icon="@drawable/ic_world_map"
|
||||
android:title="@string/menu_map_view" />
|
||||
<item
|
||||
android:id="@+id/nav_settings"
|
||||
android:icon="@drawable/ic_settings"
|
||||
|
||||
@@ -3,16 +3,16 @@
|
||||
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_sky">
|
||||
app:startDestination="@id/nav_pass_list">
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_sky"
|
||||
android:name="com.rtbishop.look4sat.ui.SkyFragment"
|
||||
android:label="@string/menu_sky"
|
||||
tools:layout="@layout/fragment_sky">
|
||||
android:id="@+id/nav_pass_list"
|
||||
android:name="com.rtbishop.look4sat.ui.PassListFragment"
|
||||
android:label="@string/menu_pass_list"
|
||||
tools:layout="@layout/fragment_pass_list">
|
||||
<action
|
||||
android:id="@+id/action_nav_sky_to_nav_radar"
|
||||
app:destination="@id/nav_radar"
|
||||
android:id="@+id/action_pass_to_polar"
|
||||
app:destination="@id/nav_polar_view"
|
||||
app:enterAnim="@anim/nav_default_enter_anim"
|
||||
app:exitAnim="@anim/nav_default_exit_anim"
|
||||
app:popEnterAnim="@anim/nav_default_enter_anim"
|
||||
@@ -20,20 +20,20 @@
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_radar"
|
||||
android:name="com.rtbishop.look4sat.ui.RadarFragment"
|
||||
android:label="@string/menu_radar"
|
||||
tools:layout="@layout/fragment_radar">
|
||||
android:id="@+id/nav_polar_view"
|
||||
android:name="com.rtbishop.look4sat.ui.PolarViewFragment"
|
||||
android:label="@string/menu_polar_view"
|
||||
tools:layout="@layout/fragment_polar_view">
|
||||
<argument
|
||||
android:name="satPass"
|
||||
app:argType="com.rtbishop.look4sat.repo.SatPass" />
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_map"
|
||||
android:name="com.rtbishop.look4sat.ui.WorldMapFragment"
|
||||
android:label="@string/menu_map"
|
||||
tools:layout="@layout/fragment_worldmap" />
|
||||
android:id="@+id/nav_map_view"
|
||||
android:name="com.rtbishop.look4sat.ui.MapViewFragment"
|
||||
android:label="@string/menu_map_view"
|
||||
tools:layout="@layout/fragment_map_view" />
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_credits"
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="themeAccent">#FFE082</color>
|
||||
<color name="darkOnLight">#101010</color>
|
||||
<color name="lightOnDark">#C0C0C0</color>
|
||||
<color name="toolbarButton">#191919</color>
|
||||
<color name="themeLight">#C0C0C0</color>
|
||||
<color name="themeDark">#191919</color>
|
||||
<color name="backgroundDark">#080808</color>
|
||||
<color name="error">#800000</color>
|
||||
<color name="satTrack">#D50000</color>
|
||||
<color name="satFootprint">#FFE082</color>
|
||||
</resources>
|
||||
@@ -1,3 +0,0 @@
|
||||
<resources>
|
||||
<dimen name="fab_margin">16dp</dimen>
|
||||
</resources>
|
||||
@@ -1,110 +1,122 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Look4Sat</string>
|
||||
<string name="title">L∞king \n4Sat…</string>
|
||||
|
||||
<string name="drawer_latitude">Latitude: </string>
|
||||
<string name="drawer_latitude_value">51.5074</string>
|
||||
<string name="drawer_longitude">Longitude: </string>
|
||||
<string name="drawer_longitude_value">0.1278</string>
|
||||
<string name="drawer_title">L∞king \n4Sat…</string>
|
||||
<string name="drawer_lat">Latitude: </string>
|
||||
<string name="drawer_lat_value">51.5074</string>
|
||||
<string name="drawer_lon">Longitude: </string>
|
||||
<string name="drawer_lon_value">0.1278</string>
|
||||
|
||||
<string name="update_location">Update location</string>
|
||||
<string name="update_loc">Update location</string>
|
||||
<string name="update_tle">Update TLE file</string>
|
||||
<string name="update_transmitters">Update transmitters DB</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="exit">Exit</string>
|
||||
|
||||
<string name="menu_sky">Sky at a Glance</string>
|
||||
<string name="menu_radar">Radar View</string>
|
||||
<string name="menu_map">World Map View</string>
|
||||
<string name="menu_settings">Settings</string>
|
||||
<string name="menu_credits">Credits</string>
|
||||
<string name="menu_about">About the App</string>
|
||||
|
||||
<string name="pass_satName">Meteor M2–2</string>
|
||||
<string name="pass_satId">ID: 48680</string>
|
||||
<string name="pass_azVector">Az: 180° -> 360°</string>
|
||||
<string name="pass_maxEl">MaxEl: 75.5°</string>
|
||||
<string name="pass_aosTime">AOS - 13:14:15</string>
|
||||
<string name="pass_losTime">LOS - 16:17:18</string>
|
||||
|
||||
<string name="radar_azimuth">Azimuth: 180.00°</string>
|
||||
<string name="radar_elevation">Elevation: 75.50°</string>
|
||||
<string name="radar_altitude">Altitude: 850 km</string>
|
||||
<string name="radar_range">Range: 12000 km</string>
|
||||
|
||||
<string name="btn_ok">OK</string>
|
||||
<string name="btn_cancel">Cancel</string>
|
||||
<string name="btn_clear">Clear All</string>
|
||||
<string name="btn_no">No</string>
|
||||
<string name="btn_yes">Yes</string>
|
||||
|
||||
<string name="dialog_select_sat">Select satellites to track</string>
|
||||
<string name="dialog_show_track">Show ground track for…</string>
|
||||
<string name="dialog_pass_prefs">Satellite pass preferences</string>
|
||||
|
||||
<string name="pref_hours_ahead_summary">Show passes that occur within X hours</string>
|
||||
<string name="pref_hours_ahead_hint">Hours ahead</string>
|
||||
<string name="pref_min_el_summary">Show passes with max elevation above</string>
|
||||
<string name="pref_min_el_hint">Minimum elevation</string>
|
||||
|
||||
<string name="pref_gsp_title">Ground station position settings</string>
|
||||
<string name="pref_lat_title">Latitude</string>
|
||||
<string name="pref_lat_input_error">Lat should be within -90 to 90 deg</string>
|
||||
<string name="pref_lon_title">Longitude</string>
|
||||
<string name="pref_lon_input_error">Lon should be within -180 to 180 deg</string>
|
||||
<string name="pref_alt_title">Altitude</string>
|
||||
<string name="pref_alt_input_error">Alt should be within -413 to 8850 m</string>
|
||||
<string name="pref_other_title">Other settings</string>
|
||||
<string name="pref_update_freq_title">Update frequency</string>
|
||||
<string name="pref_update_freq_input_error">Value should be within 250 to 10000 ms</string>
|
||||
<string name="pref_update_freq_summary">Views update interval, ms</string>
|
||||
|
||||
<string name="def_gsp_loc">0.0</string>
|
||||
<string name="def_hours_ahead">8</string>
|
||||
<string name="def_min_el">16.0</string>
|
||||
<string name="def_update_freq">3000</string>
|
||||
|
||||
<string name="key_lat">latitude</string>
|
||||
<string name="key_lon">longitude</string>
|
||||
<string name="key_alt">altitude</string>
|
||||
<string name="key_hours_ahead">hoursAhead</string>
|
||||
<string name="key_min_el">minEl</string>
|
||||
<string name="key_delay">delay</string>
|
||||
<string name="tle_main_list_file_name">tleFile.txt</string>
|
||||
<string name="tle_selection_file_name">tleSelection</string>
|
||||
|
||||
<string name="no_mode">Mode: Null</string>
|
||||
<string name="no_uplink">Uplink: Null</string>
|
||||
<string name="no_downlink">Downlink: Null</string>
|
||||
<string name="no_permissions">Missing permissions</string>
|
||||
<string name="no_trans">No transmitters found for this Satellite</string>
|
||||
<string name="no_selected_sat">No satellites were shortlisted</string>
|
||||
|
||||
<string name="trans_description">ARGOS-3 A-DCS 465.9875MHz</string>
|
||||
<string name="trans_downlink">Downlink: 465.9875 MHz</string>
|
||||
<string name="trans_uplink">Uplink: 465.9875 MHz</string>
|
||||
<string name="trans_mode">Mode: BPSK400</string>
|
||||
<string name="trans_inverted">Inverted: Yes</string>
|
||||
<string name="trans_header">Transmitters:</string>
|
||||
|
||||
<string name="pattern_location">%.4f</string>
|
||||
<string name="pattern_aos">AOS -%02d:%02d:%02d</string>
|
||||
<string name="pattern_los">LOS -%02d:%02d:%02d</string>
|
||||
<string name="pattern_trans_mode">Mode: %s</string>
|
||||
<string name="pattern_trans_inverted">Inverted: %s</string>
|
||||
<string name="pattern_trans_uplink_low">Uplink: %.4f MHz</string>
|
||||
<string name="pattern_trans_uplink_lowHigh">Uplink: %.4f - %.4f MHz</string>
|
||||
<string name="pattern_trans_downlink_low">Downlink: %.4f MHz</string>
|
||||
<string name="pattern_trans_downlink_lowHigh">Downlink: %.4f - %.4f MHz</string>
|
||||
|
||||
<string name="map_gsp">GSP</string>
|
||||
<string name="map_content">Nasa Map</string>
|
||||
<string name="placeholder">Placeholder</string>
|
||||
<string name="update_trans">Update transmitters DB</string>
|
||||
<string name="goto_github">GitHub</string>
|
||||
<string name="exit_app">Exit</string>
|
||||
|
||||
<string name="updateLocSuccess">Location was updated</string>
|
||||
<string name="updateTleSuccess">TLE file was updated</string>
|
||||
<string name="updateTleFailure">Could not update TLE file</string>
|
||||
<string name="updateTransSuccess">Transmitters database was updated</string>
|
||||
<string name="updateTransFailure">Could not update transmitters</string>
|
||||
|
||||
<string name="menu_pass_list">List of passes</string>
|
||||
<string name="menu_polar_view">Polar View</string>
|
||||
<string name="menu_map_view">World Map View</string>
|
||||
<string name="menu_settings">Settings</string>
|
||||
<string name="menu_credits">Credits</string>
|
||||
<string name="menu_about">About the App</string>
|
||||
|
||||
<string name="pass_satName">Meteor M2–2</string>
|
||||
<string name="pass_satId">ID: 48680</string>
|
||||
<string name="pass_azimuth">Az: 180° -> 360°</string>
|
||||
<string name="pass_maxEl">MaxEl: 75.5°</string>
|
||||
<string name="pass_aosTime">AOS - 13:14:15</string>
|
||||
<string name="pass_losTime">LOS - 16:17:18</string>
|
||||
|
||||
<string name="polar_azimuth">Azimuth: 180.00°</string>
|
||||
<string name="polar_elevation">Elevation: 75.50°</string>
|
||||
<string name="polar_altitude">Altitude: 850 km</string>
|
||||
<string name="polar_range">Range: 12000 km</string>
|
||||
|
||||
<string name="trans_description">ARGOS-3 A-DCS 465.9875MHz</string>
|
||||
<string name="trans_downlink">Downlink: 465.9875 MHz</string>
|
||||
<string name="trans_uplink">Uplink: 465.9875 MHz</string>
|
||||
<string name="trans_mode">Mode: BPSK400</string>
|
||||
<string name="trans_inverted">Inverted: Yes</string>
|
||||
|
||||
<string name="dialog_select_sat">Select satellites to track</string>
|
||||
<string name="dialog_show_track">Show ground track for…</string>
|
||||
<string name="dialog_filter_passes">Filter passes</string>
|
||||
|
||||
<string name="pref_hours_ahead_key">hoursAhead</string>
|
||||
<string name="pref_hours_ahead_hint">Hours ahead</string>
|
||||
<string name="pref_hours_ahead_summary">Show passes that occur within X hours</string>
|
||||
<string name="pref_hours_ahead_input_error">Value should be within 1–168 hours</string>
|
||||
<string name="pref_min_el_key">minEl</string>
|
||||
<string name="pref_min_el_hint">Minimum elevation</string>
|
||||
<string name="pref_min_el_summary">Show passes with max elevation above</string>
|
||||
<string name="pref_min_el_input_error">Value should be within 0–90 deg</string>
|
||||
|
||||
<string name="pref_gsp_title">Ground station position settings</string>
|
||||
<string name="pref_lat_key">latitude</string>
|
||||
<string name="pref_lat_title">Latitude</string>
|
||||
<string name="pref_lat_input_error">Lat should be within -90 to 90 deg</string>
|
||||
<string name="pref_lon_key">longitude</string>
|
||||
<string name="pref_lon_title">Longitude</string>
|
||||
<string name="pref_lon_input_error">Lon should be within -180 to 180 deg</string>
|
||||
<string name="pref_alt_key">altitude</string>
|
||||
<string name="pref_alt_title">Altitude</string>
|
||||
<string name="pref_alt_input_error">Alt should be within -413 to 8850 m</string>
|
||||
<string name="pref_other_title">Other settings</string>
|
||||
<string name="pref_refresh_rate_key">rate</string>
|
||||
<string name="pref_refresh_rate_title">Refresh rate</string>
|
||||
<string name="pref_refresh_rate_input_error">Value should be within 250 to 10000 ms</string>
|
||||
<string name="pref_refresh_rate_summary">Views update interval, ms</string>
|
||||
|
||||
<string name="no_permissions">Missing permissions</string>
|
||||
<string name="no_mode">Mode: Null</string>
|
||||
<string name="no_uplink">Uplink: Null</string>
|
||||
<string name="no_downlink">Downlink: Null</string>
|
||||
<string name="no_transmitters">No transmitters found for this Satellite</string>
|
||||
<string name="no_selected_sat">No satellites were shortlisted</string>
|
||||
<string name="no_tle_found">TLE file was not found</string>
|
||||
<string name="no_selection_found">Selection file was not found</string>
|
||||
|
||||
<string name="error_sat_wont_pass">Certain satellites will never pass</string>
|
||||
<string name="error_sat_tle">There was a problem with a satellite TLE</string>
|
||||
<string name="error_update_tle">Please, update your TLE</string>
|
||||
<string name="error_enter_value">Please, enter the value</string>
|
||||
|
||||
<string name="pattern_loc">%.4f</string>
|
||||
<string name="pattern_time">HH:mm:ss</string>
|
||||
<string name="pattern_timer_aos">AOS -%02d:%02d:%02d</string>
|
||||
<string name="pattern_timer_los">LOS -%02d:%02d:%02d</string>
|
||||
|
||||
<string name="pattern_pass_aos">AOS - %s</string>
|
||||
<string name="pattern_pass_los">LOS - %s</string>
|
||||
<string name="pattern_pass_satId">Id: %d</string>
|
||||
<string name="pattern_pass_maxEl">MaxEl: %.1f°</string>
|
||||
<string name="pattern_pass_azimuth">Az: %2d° -> %2d°</string>
|
||||
|
||||
<string name="pattern_polar_azimuth">Azimuth: %.1f°</string>
|
||||
<string name="pattern_polar_elev">Elevation: %.1f°</string>
|
||||
<string name="pattern_polar_range">Range: %.0f km</string>
|
||||
<string name="pattern_polar_alt">Altitude: %.0f km</string>
|
||||
|
||||
<string name="pattern_trans_mode">Mode: %s</string>
|
||||
<string name="pattern_trans_invert">Inverted: %s</string>
|
||||
<string name="pattern_trans_up_low">Uplink: %.4f MHz</string>
|
||||
<string name="pattern_trans_up_lowHigh">Uplink: %.4f - %.4f MHz</string>
|
||||
<string name="pattern_trans_down_low">Downlink: %.4f MHz</string>
|
||||
<string name="pattern_trans_down_lowHigh">Downlink: %.4f - %.4f MHz</string>
|
||||
|
||||
<string name="btn_yes">Yes</string>
|
||||
<string name="btn_no">No</string>
|
||||
<string name="btn_ok">OK</string>
|
||||
<string name="btn_cancel">Cancel</string>
|
||||
<string name="btn_clear">Clear All</string>
|
||||
|
||||
<string name="map_gsp">GSP</string>
|
||||
<string name="placeholder">Placeholder</string>
|
||||
</resources>
|
||||
@@ -4,12 +4,10 @@
|
||||
<item name="colorPrimary">@color/themeAccent</item>
|
||||
<item name="colorSecondary">@color/themeAccent</item>
|
||||
<item name="colorSurface">@color/backgroundDark</item>
|
||||
<item name="colorError">@color/error</item>
|
||||
|
||||
<item name="colorOnPrimary">@color/darkOnLight</item>
|
||||
<item name="colorOnSecondary">@color/darkOnLight</item>
|
||||
<item name="colorOnSurface">@color/lightOnDark</item>
|
||||
<item name="colorOnError">@color/lightOnDark</item>
|
||||
<item name="colorOnPrimary">@color/backgroundDark</item>
|
||||
<item name="colorOnSecondary">@color/backgroundDark</item>
|
||||
<item name="colorOnSurface">@color/themeLight</item>
|
||||
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
@@ -23,7 +21,7 @@
|
||||
<style name="DrawerHeader">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:textColor">@color/lightOnDark</item>
|
||||
<item name="android:textColor">@color/themeLight</item>
|
||||
</style>
|
||||
|
||||
<style name="DrawerHeader.Title">
|
||||
@@ -64,39 +62,34 @@
|
||||
<style name="ToolbarButton">
|
||||
<item name="android:layout_width">48dp</item>
|
||||
<item name="android:layout_height">48dp</item>
|
||||
<item name="android:src">@drawable/ic_prefs</item>
|
||||
<item name="android:backgroundTint">@color/toolbarButton</item>
|
||||
<item name="android:src">@drawable/ic_filter</item>
|
||||
<item name="android:backgroundTint">@color/themeDark</item>
|
||||
</style>
|
||||
|
||||
<style name="CardPass">
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
</style>
|
||||
|
||||
<style name="CardPass.SideText">
|
||||
<style name="CardPassText">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:textSize">18sp</item>
|
||||
</style>
|
||||
|
||||
<style name="CardPass.SatName">
|
||||
<style name="CardPassName">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:textSize">21sp</item>
|
||||
<item name="android:textColor">@color/themeAccent</item>
|
||||
</style>
|
||||
|
||||
<style name="RadarText">
|
||||
<style name="PolarViewText">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:textColor">@color/lightOnDark</item>
|
||||
<item name="android:textColor">@color/themeLight</item>
|
||||
<item name="android:textSize">15sp</item>
|
||||
</style>
|
||||
|
||||
<style name="CardTransText">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:textColor">@color/lightOnDark</item>
|
||||
<item name="android:textColor">@color/themeLight</item>
|
||||
<item name="android:textSize">15sp</item>
|
||||
</style>
|
||||
|
||||
|
||||
@@ -2,31 +2,31 @@
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<PreferenceCategory android:title="@string/pref_gsp_title">
|
||||
<EditTextPreference
|
||||
android:defaultValue="@string/def_gsp_loc"
|
||||
android:key="@string/key_lat"
|
||||
android:defaultValue="0.0"
|
||||
android:key="@string/pref_lat_key"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="@string/pref_lat_title" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="@string/def_gsp_loc"
|
||||
android:key="@string/key_lon"
|
||||
android:defaultValue="0.0"
|
||||
android:key="@string/pref_lon_key"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="@string/pref_lon_title" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="@string/def_gsp_loc"
|
||||
android:key="@string/key_alt"
|
||||
android:defaultValue="0.0"
|
||||
android:key="@string/pref_alt_key"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="@string/pref_alt_title" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_other_title">
|
||||
<EditTextPreference
|
||||
android:defaultValue="@string/def_update_freq"
|
||||
android:key="@string/key_delay"
|
||||
android:defaultValue="3000"
|
||||
android:key="@string/pref_refresh_rate_key"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:summary="@string/pref_update_freq_summary"
|
||||
android:title="@string/pref_update_freq_title" />
|
||||
android:summary="@string/pref_refresh_rate_summary"
|
||||
android:title="@string/pref_refresh_rate_title" />
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
Reference in new issue
Block a user