mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Moved to viewBinding instead of findViewById
This commit is contained in:
1 parent
7c19bb5b52
commit
38b9feb829
22 files changed
+292
-349
No files matched your search
+4
-1
@@ -50,12 +50,15 @@ android {
|
|||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = "1.8"
|
jvmTarget = "1.8"
|
||||||
}
|
}
|
||||||
|
viewBinding {
|
||||||
|
enabled = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
implementation "com.google.android.material:material:$material"
|
implementation "com.google.android.material:material:$material"
|
||||||
implementation "androidx.appcompat:appcompat:$supportLib"
|
implementation "androidx.appcompat:appcompat:$appCompat"
|
||||||
implementation "androidx.legacy:legacy-support-v4:$supportLib"
|
implementation "androidx.legacy:legacy-support-v4:$supportLib"
|
||||||
implementation "androidx.constraintlayout:constraintlayout:$constraintLayout"
|
implementation "androidx.constraintlayout:constraintlayout:$constraintLayout"
|
||||||
|
|
||||||
|
|||||||
@@ -24,31 +24,34 @@ import android.text.method.LinkMovementMethod
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.TextView
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import com.rtbishop.look4sat.BuildConfig
|
import com.rtbishop.look4sat.BuildConfig
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
|
import com.rtbishop.look4sat.databinding.FragmentAboutBinding
|
||||||
|
|
||||||
class AboutFragment : Fragment() {
|
class AboutFragment : Fragment() {
|
||||||
|
|
||||||
private lateinit var textVersion: TextView
|
private var _binding: FragmentAboutBinding? = null
|
||||||
private lateinit var textThanks: TextView
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View? {
|
||||||
return inflater.inflate(R.layout.fragment_about, container, false)
|
_binding = FragmentAboutBinding.inflate(inflater, container, false)
|
||||||
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
binding.tvAboutVersion.text =
|
||||||
|
String.format(getString(R.string.app_version), BuildConfig.VERSION_NAME)
|
||||||
|
binding.tvAboutMessage.movementMethod = LinkMovementMethod.getInstance()
|
||||||
|
}
|
||||||
|
|
||||||
textVersion = view.findViewById(R.id.about_title_version)
|
override fun onDestroyView() {
|
||||||
textThanks = view.findViewById(R.id.about_thanks_to)
|
_binding = null
|
||||||
|
super.onDestroyView()
|
||||||
textVersion.text = String.format(getString(R.string.app_version), BuildConfig.VERSION_NAME)
|
|
||||||
textThanks.movementMethod = LinkMovementMethod.getInstance()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -27,15 +27,10 @@ import android.content.pm.PackageManager
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Button
|
|
||||||
import android.widget.TextView
|
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.widget.Toolbar
|
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
import androidx.core.app.ActivityCompat
|
import androidx.core.app.ActivityCompat
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.drawerlayout.widget.DrawerLayout
|
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.navigation.findNavController
|
import androidx.navigation.findNavController
|
||||||
@@ -43,9 +38,10 @@ import androidx.navigation.ui.AppBarConfiguration
|
|||||||
import androidx.navigation.ui.navigateUp
|
import androidx.navigation.ui.navigateUp
|
||||||
import androidx.navigation.ui.setupActionBarWithNavController
|
import androidx.navigation.ui.setupActionBarWithNavController
|
||||||
import androidx.navigation.ui.setupWithNavController
|
import androidx.navigation.ui.setupWithNavController
|
||||||
import com.google.android.material.navigation.NavigationView
|
|
||||||
import com.rtbishop.look4sat.MainViewModel
|
import com.rtbishop.look4sat.MainViewModel
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
|
import com.rtbishop.look4sat.databinding.ActivityMainBinding
|
||||||
|
import com.rtbishop.look4sat.databinding.DrawerHeaderBinding
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
@@ -54,22 +50,17 @@ class MainActivity : AppCompatActivity() {
|
|||||||
private val permGranted = PackageManager.PERMISSION_GRANTED
|
private val permGranted = PackageManager.PERMISSION_GRANTED
|
||||||
private val githubUrl = "https://github.com/rt-bishop/LookingSat"
|
private val githubUrl = "https://github.com/rt-bishop/LookingSat"
|
||||||
|
|
||||||
|
private lateinit var mainBinding: ActivityMainBinding
|
||||||
|
private lateinit var drawerBinding: DrawerHeaderBinding
|
||||||
private lateinit var viewModel: MainViewModel
|
private lateinit var viewModel: MainViewModel
|
||||||
private lateinit var timerLayout: ConstraintLayout
|
|
||||||
private lateinit var drawerLayout: DrawerLayout
|
|
||||||
private lateinit var drawerLat: TextView
|
|
||||||
private lateinit var drawerLon: TextView
|
|
||||||
private lateinit var drawerBtnLoc: Button
|
|
||||||
private lateinit var drawerBtnTle: Button
|
|
||||||
private lateinit var drawerBtnTrans: Button
|
|
||||||
private lateinit var drawerBtnGithub: Button
|
|
||||||
private lateinit var drawerBtnExit: Button
|
|
||||||
private lateinit var appBarConfig: AppBarConfiguration
|
private lateinit var appBarConfig: AppBarConfiguration
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
setTheme(R.style.AppTheme)
|
setTheme(R.style.AppTheme)
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
mainBinding = ActivityMainBinding.inflate(layoutInflater)
|
||||||
|
drawerBinding = DrawerHeaderBinding.inflate(layoutInflater, mainBinding.navView, true)
|
||||||
|
setContentView(mainBinding.root)
|
||||||
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
|
||||||
setupComponents()
|
setupComponents()
|
||||||
setupObservers()
|
setupObservers()
|
||||||
@@ -79,24 +70,13 @@ class MainActivity : AppCompatActivity() {
|
|||||||
@SuppressLint("SourceLockedOrientationActivity")
|
@SuppressLint("SourceLockedOrientationActivity")
|
||||||
private fun setupComponents() {
|
private fun setupComponents() {
|
||||||
val navController = findNavController(R.id.nav_host)
|
val navController = findNavController(R.id.nav_host)
|
||||||
val navView: NavigationView = findViewById(R.id.nav_view)
|
val navView = mainBinding.navView
|
||||||
val header = navView.getHeaderView(0)
|
val toolbar = mainBinding.includeAppBar.toolbar
|
||||||
val toolbar: Toolbar = findViewById(R.id.toolbar)
|
|
||||||
setSupportActionBar(toolbar)
|
setSupportActionBar(toolbar)
|
||||||
|
|
||||||
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)
|
|
||||||
drawerBtnLoc = header.findViewById(R.id.drawer_btn_loc)
|
|
||||||
drawerBtnTle = header.findViewById(R.id.drawer_btn_tle)
|
|
||||||
drawerBtnTrans = header.findViewById(R.id.drawer_btn_trans)
|
|
||||||
drawerBtnGithub = header.findViewById(R.id.drawer_btn_github)
|
|
||||||
drawerBtnExit = header.findViewById(R.id.drawer_btn_exit)
|
|
||||||
|
|
||||||
appBarConfig = AppBarConfiguration(
|
appBarConfig = AppBarConfiguration(
|
||||||
setOf(R.id.nav_pass_list, R.id.nav_map_view, R.id.nav_settings, R.id.nav_about),
|
setOf(R.id.nav_pass_list, R.id.nav_map_view, R.id.nav_settings, R.id.nav_about),
|
||||||
drawerLayout
|
mainBinding.drawerLayout
|
||||||
)
|
)
|
||||||
|
|
||||||
setupActionBarWithNavController(navController, appBarConfig)
|
setupActionBarWithNavController(navController, appBarConfig)
|
||||||
@@ -107,7 +87,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
R.id.nav_pass_list -> {
|
R.id.nav_pass_list -> {
|
||||||
this.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
this.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||||
toolbar.visibility = View.VISIBLE
|
toolbar.visibility = View.VISIBLE
|
||||||
timerLayout.visibility = View.VISIBLE
|
mainBinding.includeAppBar.toolbarLayout.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
R.id.nav_map_view -> {
|
R.id.nav_map_view -> {
|
||||||
this.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
|
this.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
|
||||||
@@ -116,7 +96,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
else -> {
|
else -> {
|
||||||
this.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
this.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||||
toolbar.visibility = View.VISIBLE
|
toolbar.visibility = View.VISIBLE
|
||||||
timerLayout.visibility = View.GONE
|
mainBinding.includeAppBar.toolbarLayout.visibility = View.GONE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -126,40 +106,45 @@ class MainActivity : AppCompatActivity() {
|
|||||||
viewModel.debugMessage.observe(this, Observer { message ->
|
viewModel.debugMessage.observe(this, Observer { message ->
|
||||||
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
|
||||||
when (message) {
|
when (message) {
|
||||||
getString(R.string.update_loc_success) -> drawerBtnLoc.isEnabled = true
|
getString(R.string.update_loc_success) -> drawerBinding.drawerBtnLoc.isEnabled =
|
||||||
getString(R.string.update_tle_success) -> drawerBtnTle.isEnabled = true
|
true
|
||||||
getString(R.string.update_trans_success) -> drawerBtnTrans.isEnabled = true
|
getString(R.string.update_tle_success) -> drawerBinding.drawerBtnTle.isEnabled =
|
||||||
|
true
|
||||||
|
getString(R.string.update_trans_success) -> drawerBinding.drawerBtnTrans.isEnabled =
|
||||||
|
true
|
||||||
getString(R.string.update_failure) -> {
|
getString(R.string.update_failure) -> {
|
||||||
drawerBtnTle.isEnabled = true
|
drawerBinding.drawerBtnTle.isEnabled = true
|
||||||
drawerBtnTrans.isEnabled = true
|
drawerBinding.drawerBtnTrans.isEnabled = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
viewModel.gsp.observe(this, Observer { gsp ->
|
viewModel.gsp.observe(this, Observer { gsp ->
|
||||||
drawerLat.text = String.format(getString(R.string.pat_location), gsp.latitude)
|
drawerBinding.drawerLatValue.text =
|
||||||
drawerLon.text = String.format(getString(R.string.pat_location), gsp.longitude)
|
String.format(getString(R.string.pat_location), gsp.latitude)
|
||||||
|
drawerBinding.drawerLonValue.text =
|
||||||
|
String.format(getString(R.string.pat_location), gsp.longitude)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupDrawer() {
|
private fun setupDrawer() {
|
||||||
drawerBtnLoc.setOnClickListener {
|
drawerBinding.drawerBtnLoc.setOnClickListener {
|
||||||
it.isEnabled = false
|
it.isEnabled = false
|
||||||
requestLocationUpdate()
|
requestLocationUpdate()
|
||||||
}
|
}
|
||||||
drawerBtnTle.setOnClickListener {
|
drawerBinding.drawerBtnTle.setOnClickListener {
|
||||||
it.isEnabled = false
|
it.isEnabled = false
|
||||||
viewModel.updateAndSaveTleFile()
|
viewModel.updateAndSaveTleFile()
|
||||||
}
|
}
|
||||||
drawerBtnTrans.setOnClickListener {
|
drawerBinding.drawerBtnTrans.setOnClickListener {
|
||||||
it.isEnabled = false
|
it.isEnabled = false
|
||||||
viewModel.updateTransmittersDatabase()
|
viewModel.updateTransmittersDatabase()
|
||||||
}
|
}
|
||||||
drawerBtnGithub.setOnClickListener {
|
drawerBinding.drawerBtnGithub.setOnClickListener {
|
||||||
val githubIntent = Intent(Intent.ACTION_VIEW, Uri.parse(githubUrl))
|
val githubIntent = Intent(Intent.ACTION_VIEW, Uri.parse(githubUrl))
|
||||||
startActivity(githubIntent)
|
startActivity(githubIntent)
|
||||||
}
|
}
|
||||||
drawerBtnExit.setOnClickListener { finish() }
|
drawerBinding.drawerBtnExit.setOnClickListener { finish() }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun requestLocationUpdate() {
|
private fun requestLocationUpdate() {
|
||||||
|
|||||||
@@ -25,8 +25,6 @@ import android.os.Bundle
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.FrameLayout
|
|
||||||
import android.widget.TextView
|
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
@@ -36,9 +34,9 @@ import com.github.amsacode.predict4java.GroundStationPosition
|
|||||||
import com.github.amsacode.predict4java.Position
|
import com.github.amsacode.predict4java.Position
|
||||||
import com.github.amsacode.predict4java.SatPos
|
import com.github.amsacode.predict4java.SatPos
|
||||||
import com.github.amsacode.predict4java.TLE
|
import com.github.amsacode.predict4java.TLE
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
|
||||||
import com.rtbishop.look4sat.MainViewModel
|
import com.rtbishop.look4sat.MainViewModel
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
|
import com.rtbishop.look4sat.databinding.FragmentMapViewBinding
|
||||||
import com.rtbishop.look4sat.predict4kotlin.PassPredictor
|
import com.rtbishop.look4sat.predict4kotlin.PassPredictor
|
||||||
import com.rtbishop.look4sat.repo.SatPass
|
import com.rtbishop.look4sat.repo.SatPass
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -49,15 +47,13 @@ import kotlin.math.abs
|
|||||||
|
|
||||||
class MapViewFragment : Fragment() {
|
class MapViewFragment : Fragment() {
|
||||||
|
|
||||||
|
private var _binding: FragmentMapViewBinding? = null
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private lateinit var service: ScheduledExecutorService
|
private lateinit var service: ScheduledExecutorService
|
||||||
private lateinit var mainActivity: MainActivity
|
private lateinit var mainActivity: MainActivity
|
||||||
private lateinit var viewModel: MainViewModel
|
private lateinit var viewModel: MainViewModel
|
||||||
private lateinit var mapFrame: FrameLayout
|
|
||||||
private lateinit var mapFab: FloatingActionButton
|
|
||||||
private lateinit var mapView: MapView
|
private lateinit var mapView: MapView
|
||||||
private lateinit var mapLat: TextView
|
|
||||||
private lateinit var mapLon: TextView
|
|
||||||
private lateinit var mapRng: TextView
|
|
||||||
private lateinit var predictor: PassPredictor
|
private lateinit var predictor: PassPredictor
|
||||||
private lateinit var selectedSat: TLE
|
private lateinit var selectedSat: TLE
|
||||||
private lateinit var gsp: GroundStationPosition
|
private lateinit var gsp: GroundStationPosition
|
||||||
@@ -76,23 +72,15 @@ class MapViewFragment : Fragment() {
|
|||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View? {
|
||||||
return inflater.inflate(R.layout.fragment_map_view, container, false)
|
_binding = FragmentMapViewBinding.inflate(layoutInflater, container, false)
|
||||||
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
findViews(view)
|
|
||||||
setupComponents()
|
setupComponents()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun findViews(view: View) {
|
|
||||||
mapFrame = view.findViewById(R.id.map_frame)
|
|
||||||
mapFab = view.findViewById(R.id.map_fab)
|
|
||||||
mapLat = view.findViewById(R.id.map_lat)
|
|
||||||
mapLon = view.findViewById(R.id.map_lon)
|
|
||||||
mapRng = view.findViewById(R.id.map_rng)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupComponents() {
|
private fun setupComponents() {
|
||||||
val delay = viewModel.delay
|
val delay = viewModel.delay
|
||||||
gsp = viewModel.gsp.value ?: GroundStationPosition(0.0, 0.0, 0.0)
|
gsp = viewModel.gsp.value ?: GroundStationPosition(0.0, 0.0, 0.0)
|
||||||
@@ -101,11 +89,11 @@ class MapViewFragment : Fragment() {
|
|||||||
if (satPassList.isNotEmpty()) {
|
if (satPassList.isNotEmpty()) {
|
||||||
satPassList = satPassList.distinctBy { it.tle }
|
satPassList = satPassList.distinctBy { it.tle }
|
||||||
satPassList = satPassList.sortedBy { it.tle.name }
|
satPassList = satPassList.sortedBy { it.tle.name }
|
||||||
mapFab.setOnClickListener { showSelectSatDialog(satPassList) }
|
binding.fabMap.setOnClickListener { showSelectSatDialog(satPassList) }
|
||||||
selectedSat = satPassList.first().tle
|
selectedSat = satPassList.first().tle
|
||||||
predictor = satPassList.first().predictor
|
predictor = satPassList.first().predictor
|
||||||
mapView = MapView(mainActivity)
|
mapView = MapView(mainActivity)
|
||||||
mapFrame.addView(mapView)
|
binding.frameMap.addView(mapView)
|
||||||
service.scheduleAtFixedRate(
|
service.scheduleAtFixedRate(
|
||||||
{ mapView.invalidate() },
|
{ mapView.invalidate() },
|
||||||
delay,
|
delay,
|
||||||
@@ -113,7 +101,7 @@ class MapViewFragment : Fragment() {
|
|||||||
TimeUnit.MILLISECONDS
|
TimeUnit.MILLISECONDS
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
mapFab.setOnClickListener {
|
binding.fabMap.setOnClickListener {
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
mainActivity,
|
mainActivity,
|
||||||
getString(R.string.err_no_sat_selected),
|
getString(R.string.err_no_sat_selected),
|
||||||
@@ -209,9 +197,9 @@ class MapViewFragment : Fragment() {
|
|||||||
|
|
||||||
if (lon > 180f) lon -= 360f
|
if (lon > 180f) lon -= 360f
|
||||||
|
|
||||||
mapLat.text = String.format(context.getString(R.string.pat_latitude), lat)
|
binding.tvMapLat.text = String.format(context.getString(R.string.pat_latitude), lat)
|
||||||
mapLon.text = String.format(context.getString(R.string.pat_longitude), lon)
|
binding.tvMapLon.text = String.format(context.getString(R.string.pat_longitude), lon)
|
||||||
mapRng.text = String.format(context.getString(R.string.pat_range), rng)
|
binding.tvMapRng.text = String.format(context.getString(R.string.pat_range), rng)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun drawGroundTrack(
|
private fun drawGroundTrack(
|
||||||
@@ -313,4 +301,9 @@ class MapViewFragment : Fragment() {
|
|||||||
return value * 180 / Math.PI
|
return value * 180 / Math.PI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
_binding = null
|
||||||
|
super.onDestroyView()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -29,18 +29,15 @@ import android.widget.ImageButton
|
|||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
|
||||||
import com.github.amsacode.predict4java.TLE
|
import com.github.amsacode.predict4java.TLE
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
|
||||||
import com.rtbishop.look4sat.MainViewModel
|
import com.rtbishop.look4sat.MainViewModel
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
|
import com.rtbishop.look4sat.databinding.FragmentPassListBinding
|
||||||
import com.rtbishop.look4sat.repo.SatEntry
|
import com.rtbishop.look4sat.repo.SatEntry
|
||||||
import com.rtbishop.look4sat.repo.SatPass
|
import com.rtbishop.look4sat.repo.SatPass
|
||||||
import com.rtbishop.look4sat.ui.adapters.SatPassAdapter
|
import com.rtbishop.look4sat.ui.adapters.SatPassAdapter
|
||||||
@@ -49,15 +46,14 @@ import java.util.concurrent.TimeUnit
|
|||||||
|
|
||||||
class PassListFragment : Fragment() {
|
class PassListFragment : Fragment() {
|
||||||
|
|
||||||
|
private var _binding: FragmentPassListBinding? = null
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private lateinit var viewModel: MainViewModel
|
private lateinit var viewModel: MainViewModel
|
||||||
private lateinit var satPassRecycler: RecyclerView
|
|
||||||
private lateinit var satPassAdapter: SatPassAdapter
|
private lateinit var satPassAdapter: SatPassAdapter
|
||||||
private lateinit var btnPassPrefs: ImageButton
|
private lateinit var btnPassPrefs: ImageButton
|
||||||
private lateinit var passListFab: FloatingActionButton
|
|
||||||
private lateinit var aosTimer: CountDownTimer
|
private lateinit var aosTimer: CountDownTimer
|
||||||
private lateinit var aosTimerText: TextView
|
private lateinit var aosTimerText: TextView
|
||||||
private lateinit var swipeLayout: SwipeRefreshLayout
|
|
||||||
private lateinit var infoLayout: ConstraintLayout
|
|
||||||
private lateinit var mainActivity: MainActivity
|
private lateinit var mainActivity: MainActivity
|
||||||
private lateinit var satPassList: MutableList<SatPass>
|
private lateinit var satPassList: MutableList<SatPass>
|
||||||
private var isTimerSet: Boolean = false
|
private var isTimerSet: Boolean = false
|
||||||
@@ -75,27 +71,20 @@ class PassListFragment : Fragment() {
|
|||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View? {
|
||||||
return inflater.inflate(R.layout.fragment_pass_list, container, false)
|
_binding = FragmentPassListBinding.inflate(layoutInflater, container, false)
|
||||||
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
findViews(view)
|
aosTimerText = mainActivity.findViewById(R.id.toolbar_timer)
|
||||||
|
btnPassPrefs = mainActivity.findViewById(R.id.toolbar_filter)
|
||||||
setupComponents()
|
setupComponents()
|
||||||
setupObservers()
|
setupObservers()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun findViews(view: View) {
|
|
||||||
aosTimerText = mainActivity.findViewById(R.id.toolbar_timer)
|
|
||||||
btnPassPrefs = mainActivity.findViewById(R.id.toolbar_filter)
|
|
||||||
swipeLayout = view.findViewById(R.id.pass_list_refresh)
|
|
||||||
infoLayout = view.findViewById(R.id.pass_info_layout)
|
|
||||||
satPassRecycler = view.findViewById(R.id.pass_list_recycler)
|
|
||||||
passListFab = view.findViewById(R.id.pass_list_fab)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupComponents() {
|
private fun setupComponents() {
|
||||||
satPassRecycler.apply {
|
binding.recPassList.apply {
|
||||||
layoutManager = LinearLayoutManager(mainActivity)
|
layoutManager = LinearLayoutManager(mainActivity)
|
||||||
adapter = satPassAdapter
|
adapter = satPassAdapter
|
||||||
isVerticalScrollBarEnabled = false
|
isVerticalScrollBarEnabled = false
|
||||||
@@ -104,13 +93,13 @@ class PassListFragment : Fragment() {
|
|||||||
satPassAdapter.setList(satPassList)
|
satPassAdapter.setList(satPassList)
|
||||||
setTimer()
|
setTimer()
|
||||||
|
|
||||||
swipeLayout.setProgressBackgroundColorSchemeResource(R.color.themeAccent)
|
binding.refLayoutPassList.setProgressBackgroundColorSchemeResource(R.color.themeAccent)
|
||||||
swipeLayout.setColorSchemeResources(R.color.backgroundDark)
|
binding.refLayoutPassList.setColorSchemeResources(R.color.backgroundDark)
|
||||||
swipeLayout.setOnRefreshListener { calculatePasses() }
|
binding.refLayoutPassList.setOnRefreshListener { calculatePasses() }
|
||||||
btnPassPrefs.setOnClickListener {
|
btnPassPrefs.setOnClickListener {
|
||||||
showSatPassPrefsDialog(viewModel.hoursAhead, viewModel.minEl)
|
showSatPassPrefsDialog(viewModel.hoursAhead, viewModel.minEl)
|
||||||
}
|
}
|
||||||
passListFab.setOnClickListener {
|
binding.fabSatSelect.setOnClickListener {
|
||||||
showSelectSatDialog(viewModel.tleMainList, viewModel.tleSelection)
|
showSelectSatDialog(viewModel.tleMainList, viewModel.tleSelection)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -120,19 +109,19 @@ class PassListFragment : Fragment() {
|
|||||||
satPassList = it
|
satPassList = it
|
||||||
satPassAdapter.setList(satPassList)
|
satPassAdapter.setList(satPassList)
|
||||||
if (satPassList.isNotEmpty()) {
|
if (satPassList.isNotEmpty()) {
|
||||||
infoLayout.visibility = View.INVISIBLE
|
binding.layoutInfo.visibility = View.INVISIBLE
|
||||||
satPassRecycler.visibility = View.VISIBLE
|
binding.recPassList.visibility = View.VISIBLE
|
||||||
} else {
|
} else {
|
||||||
infoLayout.visibility = View.VISIBLE
|
binding.layoutInfo.visibility = View.VISIBLE
|
||||||
satPassRecycler.visibility = View.INVISIBLE
|
binding.recPassList.visibility = View.INVISIBLE
|
||||||
}
|
}
|
||||||
setTimer()
|
setTimer()
|
||||||
swipeLayout.isRefreshing = false
|
binding.refLayoutPassList.isRefreshing = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun calculatePasses() {
|
private fun calculatePasses() {
|
||||||
swipeLayout.isRefreshing = true
|
binding.refLayoutPassList.isRefreshing = true
|
||||||
viewModel.getPasses()
|
viewModel.getPasses()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,4 +267,9 @@ class PassListFragment : Fragment() {
|
|||||||
if (resetToNull) aosTimerText.text =
|
if (resetToNull) aosTimerText.text =
|
||||||
String.format(getString(R.string.pat_timer), 0, 0, 0)
|
String.format(getString(R.string.pat_timer), 0, 0, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
_binding = null
|
||||||
|
super.onDestroyView()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -27,18 +27,16 @@ import android.os.Bundle
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.FrameLayout
|
|
||||||
import android.widget.TextView
|
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.lifecycle.lifecycleScope
|
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 androidx.recyclerview.widget.RecyclerView
|
|
||||||
import com.github.amsacode.predict4java.SatPos
|
import com.github.amsacode.predict4java.SatPos
|
||||||
import com.rtbishop.look4sat.MainViewModel
|
import com.rtbishop.look4sat.MainViewModel
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
|
import com.rtbishop.look4sat.databinding.FragmentPolarViewBinding
|
||||||
import com.rtbishop.look4sat.repo.SatPass
|
import com.rtbishop.look4sat.repo.SatPass
|
||||||
import com.rtbishop.look4sat.ui.adapters.TransmitterAdapter
|
import com.rtbishop.look4sat.ui.adapters.TransmitterAdapter
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -53,17 +51,13 @@ class PolarViewFragment : Fragment() {
|
|||||||
private val service = Executors.newSingleThreadScheduledExecutor()
|
private val service = Executors.newSingleThreadScheduledExecutor()
|
||||||
private val args: PolarViewFragmentArgs by navArgs()
|
private val args: PolarViewFragmentArgs by navArgs()
|
||||||
|
|
||||||
|
private var _binding: FragmentPolarViewBinding? = null
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private lateinit var viewModel: MainViewModel
|
private lateinit var viewModel: MainViewModel
|
||||||
private lateinit var satPass: SatPass
|
private lateinit var satPass: SatPass
|
||||||
private lateinit var polarView: PolarView
|
private lateinit var polarView: PolarView
|
||||||
private lateinit var polarViewFrame: FrameLayout
|
|
||||||
private lateinit var transRecycler: RecyclerView
|
|
||||||
private lateinit var transmitterAdapter: TransmitterAdapter
|
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
|
private lateinit var mainActivity: MainActivity
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
@@ -77,27 +71,20 @@ class PolarViewFragment : Fragment() {
|
|||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View? {
|
||||||
return inflater.inflate(R.layout.fragment_polar_view, container, false)
|
_binding = FragmentPolarViewBinding.inflate(layoutInflater, container, false)
|
||||||
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
viewModel.satPassList.value?.let {
|
viewModel.satPassList.value?.let {
|
||||||
val refreshRate = viewModel.delay
|
val refreshRate = viewModel.delay
|
||||||
satPass = it[args.satPassIndex]
|
satPass = it[args.satPassIndex]
|
||||||
mainActivity.supportActionBar?.title = satPass.tle.name
|
mainActivity.supportActionBar?.title = satPass.tle.name
|
||||||
|
|
||||||
polarView = PolarView(mainActivity, refreshRate)
|
polarView = PolarView(mainActivity, refreshRate)
|
||||||
polarViewFrame.addView(polarView)
|
binding.framePolar.addView(polarView)
|
||||||
service.scheduleAtFixedRate(
|
service.scheduleAtFixedRate(
|
||||||
{ polarView.invalidate() },
|
{ polarView.invalidate() },
|
||||||
refreshRate,
|
refreshRate,
|
||||||
@@ -111,7 +98,7 @@ class PolarViewFragment : Fragment() {
|
|||||||
|
|
||||||
private fun setupTransRecycler() {
|
private fun setupTransRecycler() {
|
||||||
transmitterAdapter = TransmitterAdapter()
|
transmitterAdapter = TransmitterAdapter()
|
||||||
transRecycler.apply {
|
binding.recPolar.apply {
|
||||||
layoutManager = LinearLayoutManager(mainActivity)
|
layoutManager = LinearLayoutManager(mainActivity)
|
||||||
adapter = transmitterAdapter
|
adapter = transmitterAdapter
|
||||||
}
|
}
|
||||||
@@ -121,8 +108,8 @@ class PolarViewFragment : Fragment() {
|
|||||||
transmitterAdapter.setList(transList)
|
transmitterAdapter.setList(transList)
|
||||||
transmitterAdapter.notifyDataSetChanged()
|
transmitterAdapter.notifyDataSetChanged()
|
||||||
} else {
|
} else {
|
||||||
transRecycler.visibility = View.INVISIBLE
|
binding.recPolar.visibility = View.INVISIBLE
|
||||||
noTransFound.visibility = View.VISIBLE
|
binding.tvPolarNoTrans.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -178,13 +165,13 @@ class PolarViewFragment : Fragment() {
|
|||||||
|
|
||||||
private fun setPassText() {
|
private fun setPassText() {
|
||||||
satPos = satPass.predictor.getSatPos(Date())
|
satPos = satPass.predictor.getSatPos(Date())
|
||||||
polarAzimuth.text =
|
binding.tvPolarAz.text =
|
||||||
String.format(context.getString(R.string.pat_azimuth), rad2Deg(satPos.azimuth))
|
String.format(context.getString(R.string.pat_azimuth), rad2Deg(satPos.azimuth))
|
||||||
polarElevation.text =
|
binding.tvPolarEl.text =
|
||||||
String.format(context.getString(R.string.pat_elevation), rad2Deg(satPos.elevation))
|
String.format(context.getString(R.string.pat_elevation), rad2Deg(satPos.elevation))
|
||||||
polarRange.text =
|
binding.tvPolarRng.text =
|
||||||
String.format(context.getString(R.string.pat_range), satPos.range)
|
String.format(context.getString(R.string.pat_range), satPos.range)
|
||||||
polarAltitude.text =
|
binding.tvPolarAlt.text =
|
||||||
String.format(context.getString(R.string.pat_altitude), satPos.altitude)
|
String.format(context.getString(R.string.pat_altitude), satPos.altitude)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -266,4 +253,9 @@ class PolarViewFragment : Fragment() {
|
|||||||
return value * 180 / Math.PI
|
return value * 180 / Math.PI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
_binding = null
|
||||||
|
super.onDestroyView()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -24,33 +24,30 @@ import android.os.Bundle
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.Window
|
import android.view.Window
|
||||||
import android.widget.SearchView
|
import android.widget.SearchView
|
||||||
import android.widget.TextView
|
|
||||||
import androidx.appcompat.app.AppCompatDialogFragment
|
import androidx.appcompat.app.AppCompatDialogFragment
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import com.rtbishop.look4sat.databinding.DialogSatEntryBinding
|
||||||
import com.rtbishop.look4sat.R
|
|
||||||
import com.rtbishop.look4sat.repo.SatEntry
|
import com.rtbishop.look4sat.repo.SatEntry
|
||||||
import com.rtbishop.look4sat.ui.adapters.SatEntryAdapter
|
import com.rtbishop.look4sat.ui.adapters.SatEntryAdapter
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class SatEntryDialog : AppCompatDialogFragment(), SearchView.OnQueryTextListener {
|
class SatEntryDialog : AppCompatDialogFragment(), SearchView.OnQueryTextListener {
|
||||||
|
|
||||||
private lateinit var searchView: SearchView
|
|
||||||
private lateinit var recyclerView: RecyclerView
|
|
||||||
private lateinit var dialogBtnPositive: TextView
|
|
||||||
private lateinit var dialogBtnNegative: TextView
|
|
||||||
private lateinit var dialogBtnNeutral: TextView
|
|
||||||
private lateinit var satEntryAdapter: SatEntryAdapter
|
private lateinit var satEntryAdapter: SatEntryAdapter
|
||||||
private lateinit var entriesListener: EntriesSubmitListener
|
private lateinit var entriesListener: EntriesSubmitListener
|
||||||
|
|
||||||
|
private var _binding: DialogSatEntryBinding? = null
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private var entriesList = mutableListOf<SatEntry>()
|
private var entriesList = mutableListOf<SatEntry>()
|
||||||
private var selectionList = mutableListOf<Int>()
|
private var selectionList = mutableListOf<Int>()
|
||||||
private var selectAllToggle = true
|
private var selectAllToggle = true
|
||||||
|
|
||||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
|
_binding = DialogSatEntryBinding.inflate(requireActivity().layoutInflater)
|
||||||
val satEntryDialog = Dialog(requireActivity()).apply {
|
val satEntryDialog = Dialog(requireActivity()).apply {
|
||||||
window?.requestFeature(Window.FEATURE_NO_TITLE)
|
window?.requestFeature(Window.FEATURE_NO_TITLE)
|
||||||
setContentView(R.layout.dialog_sat_entry)
|
setContentView(binding.root)
|
||||||
window?.setLayout(
|
window?.setLayout(
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT
|
ViewGroup.LayoutParams.MATCH_PARENT
|
||||||
@@ -60,20 +57,21 @@ class SatEntryDialog : AppCompatDialogFragment(), SearchView.OnQueryTextListener
|
|||||||
entriesList = checkSelectedEntries(entriesList, selectionList)
|
entriesList = checkSelectedEntries(entriesList, selectionList)
|
||||||
satEntryAdapter = SatEntryAdapter(entriesList)
|
satEntryAdapter = SatEntryAdapter(entriesList)
|
||||||
|
|
||||||
findViews(satEntryDialog)
|
binding.dialogSearch.apply {
|
||||||
setListeners()
|
|
||||||
|
|
||||||
searchView.apply {
|
|
||||||
setOnQueryTextListener(this@SatEntryDialog)
|
setOnQueryTextListener(this@SatEntryDialog)
|
||||||
onActionViewExpanded()
|
onActionViewExpanded()
|
||||||
clearFocus()
|
clearFocus()
|
||||||
}
|
}
|
||||||
|
|
||||||
recyclerView.apply {
|
binding.dialogRecycler.apply {
|
||||||
layoutManager = LinearLayoutManager(activity)
|
layoutManager = LinearLayoutManager(activity)
|
||||||
adapter = satEntryAdapter
|
adapter = satEntryAdapter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.dialogBtnPositive.setOnClickListener { onPositiveClicked() }
|
||||||
|
binding.dialogBtnNegative.setOnClickListener { onNegativeClicked() }
|
||||||
|
binding.dialogBtnNeutral.setOnClickListener { onNeutralClicked() }
|
||||||
|
|
||||||
return satEntryDialog
|
return satEntryDialog
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,20 +91,6 @@ class SatEntryDialog : AppCompatDialogFragment(), SearchView.OnQueryTextListener
|
|||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun findViews(dialog: Dialog) {
|
|
||||||
searchView = dialog.findViewById(R.id.dialog_search)
|
|
||||||
recyclerView = dialog.findViewById(R.id.dialog_recycler)
|
|
||||||
dialogBtnPositive = dialog.findViewById(R.id.dialog_btn_positive)
|
|
||||||
dialogBtnNegative = dialog.findViewById(R.id.dialog_btn_negative)
|
|
||||||
dialogBtnNeutral = dialog.findViewById(R.id.dialog_btn_neutral)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setListeners() {
|
|
||||||
dialogBtnPositive.setOnClickListener { onPositiveClicked() }
|
|
||||||
dialogBtnNegative.setOnClickListener { onNegativeClicked() }
|
|
||||||
dialogBtnNeutral.setOnClickListener { onNeutralClicked() }
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun checkSelectedEntries(entries: MutableList<SatEntry>, selection: MutableList<Int>)
|
private fun checkSelectedEntries(entries: MutableList<SatEntry>, selection: MutableList<Int>)
|
||||||
: MutableList<SatEntry> {
|
: MutableList<SatEntry> {
|
||||||
selection.forEach { entries[it].isSelected = true }
|
selection.forEach { entries[it].isSelected = true }
|
||||||
@@ -163,4 +147,9 @@ class SatEntryDialog : AppCompatDialogFragment(), SearchView.OnQueryTextListener
|
|||||||
interface EntriesSubmitListener {
|
interface EntriesSubmitListener {
|
||||||
fun onEntriesSubmit(list: MutableList<Int>)
|
fun onEntriesSubmit(list: MutableList<Int>)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
_binding = null
|
||||||
|
super.onDestroyView()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -22,19 +22,17 @@ package com.rtbishop.look4sat.ui.adapters
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.CheckBox
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.databinding.ItemSatEntryBinding
|
||||||
import com.rtbishop.look4sat.repo.SatEntry
|
import com.rtbishop.look4sat.repo.SatEntry
|
||||||
|
|
||||||
internal class SatEntryAdapter(private var entriesList: MutableList<SatEntry>) :
|
internal class SatEntryAdapter(private var entriesList: MutableList<SatEntry>) :
|
||||||
RecyclerView.Adapter<SatEntryAdapter.SatEntryHolder>() {
|
RecyclerView.Adapter<SatEntryAdapter.SatEntryHolder>() {
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SatEntryHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SatEntryHolder {
|
||||||
val view = LayoutInflater
|
val binding = ItemSatEntryBinding
|
||||||
.from(parent.context)
|
.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
.inflate(R.layout.sat_entry_item, parent, false)
|
return SatEntryHolder(binding.root, binding)
|
||||||
return SatEntryHolder(view)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: SatEntryHolder, position: Int) {
|
override fun onBindViewHolder(holder: SatEntryHolder, position: Int) {
|
||||||
@@ -50,13 +48,13 @@ internal class SatEntryAdapter(private var entriesList: MutableList<SatEntry>) :
|
|||||||
notifyDataSetChanged()
|
notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
internal inner class SatEntryHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
internal inner class SatEntryHolder(itemView: View, private val binding: ItemSatEntryBinding) :
|
||||||
private val satEntryItem: CheckBox = itemView.findViewById(R.id.sat_entry_item)
|
RecyclerView.ViewHolder(itemView) {
|
||||||
|
|
||||||
fun bind(satEntry: SatEntry) {
|
fun bind(satEntry: SatEntry) {
|
||||||
satEntryItem.text = satEntry.name
|
binding.satEntryCheckbox.text = satEntry.name
|
||||||
satEntryItem.isChecked = satEntry.isSelected
|
binding.satEntryCheckbox.isChecked = satEntry.isSelected
|
||||||
itemView.setOnClickListener { satEntry.isSelected = satEntryItem.isChecked }
|
itemView.setOnClickListener { satEntry.isSelected = binding.satEntryCheckbox.isChecked }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -23,13 +23,12 @@ import android.content.Context
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.ImageView
|
|
||||||
import android.widget.ProgressBar
|
|
||||||
import android.widget.TextView
|
|
||||||
import androidx.navigation.findNavController
|
import androidx.navigation.findNavController
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.rtbishop.look4sat.MainViewModel
|
import com.rtbishop.look4sat.MainViewModel
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
|
import com.rtbishop.look4sat.databinding.ItemPassGeoBinding
|
||||||
|
import com.rtbishop.look4sat.databinding.ItemPassLeoBinding
|
||||||
import com.rtbishop.look4sat.repo.SatPass
|
import com.rtbishop.look4sat.repo.SatPass
|
||||||
import com.rtbishop.look4sat.ui.PassListFragmentDirections
|
import com.rtbishop.look4sat.ui.PassListFragmentDirections
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
@@ -80,60 +79,48 @@ class SatPassAdapter(val viewModel: MainViewModel) :
|
|||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
|
||||||
return if (viewType == 0) {
|
return if (viewType == 0) {
|
||||||
val itemView = LayoutInflater
|
val bindingLeo = ItemPassLeoBinding
|
||||||
.from(parent.context)
|
.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
.inflate(R.layout.card_pass, parent, false)
|
SatPassLeoHolder(bindingLeo.root, bindingLeo)
|
||||||
return SatPassHolder(itemView)
|
|
||||||
} else {
|
} else {
|
||||||
val itemView = LayoutInflater
|
val bindingGeo = ItemPassGeoBinding
|
||||||
.from(parent.context)
|
.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
.inflate(R.layout.card_pass_geo, parent, false)
|
SatPassGeoHolder(bindingGeo.root, bindingGeo)
|
||||||
SatPassGeoHolder(itemView)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||||
if (holder.itemViewType == 0) {
|
if (holder.itemViewType == 0) {
|
||||||
(holder as SatPassHolder).bind(satPassList[position])
|
(holder as SatPassLeoHolder).bind(satPassList[position])
|
||||||
} else {
|
} else {
|
||||||
(holder as SatPassGeoHolder).bind(satPassList[position])
|
(holder as SatPassGeoHolder).bind(satPassList[position])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class SatPassHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
inner class SatPassLeoHolder(itemView: View, private val binding: ItemPassLeoBinding) :
|
||||||
|
RecyclerView.ViewHolder(itemView) {
|
||||||
private val context: Context = itemView.context
|
|
||||||
private val passImg = itemView.findViewById<ImageView>(R.id.pass_img)
|
|
||||||
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 aosAz = itemView.findViewById<TextView>(R.id.pass_aosAz)
|
|
||||||
private val losAz = itemView.findViewById<TextView>(R.id.pass_losAz)
|
|
||||||
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) {
|
fun bind(satPass: SatPass) {
|
||||||
|
val context: Context = itemView.context
|
||||||
|
if (satPass.active) binding.passLeoImg.setImageResource(R.drawable.ic_pass_active)
|
||||||
|
else binding.passLeoImg.setImageResource(R.drawable.ic_pass_inactive)
|
||||||
|
|
||||||
if (satPass.active) passImg.setImageResource(R.drawable.ic_pass_active)
|
binding.passLeoSatName.text = satPass.tle.name
|
||||||
else passImg.setImageResource(R.drawable.ic_pass_inactive)
|
binding.passLeoSatId.text =
|
||||||
|
|
||||||
satName.text = satPass.tle.name
|
|
||||||
satId.text =
|
|
||||||
String.format(context.getString(R.string.pass_satId), satPass.tle.catnum)
|
String.format(context.getString(R.string.pass_satId), satPass.tle.catnum)
|
||||||
maxEl.text =
|
binding.passLeoMaxEl.text =
|
||||||
String.format(context.getString(R.string.pass_maxEl), satPass.pass.maxEl)
|
String.format(context.getString(R.string.pass_maxEl), satPass.pass.maxEl)
|
||||||
aosAz.text =
|
binding.passLeoAosAz.text =
|
||||||
String.format(context.getString(R.string.pass_aos_az), satPass.pass.aosAzimuth)
|
String.format(context.getString(R.string.pass_aos_az), satPass.pass.aosAzimuth)
|
||||||
losAz.text =
|
binding.passLeoLosAz.text =
|
||||||
String.format(context.getString(R.string.pass_los_az), satPass.pass.losAzimuth)
|
String.format(context.getString(R.string.pass_los_az), satPass.pass.losAzimuth)
|
||||||
aosTime.text =
|
binding.passLeoAosTime.text =
|
||||||
SimpleDateFormat(context.getString(R.string.pass_dateTime), Locale.getDefault())
|
SimpleDateFormat(context.getString(R.string.pass_dateTime), Locale.getDefault())
|
||||||
.format(satPass.pass.startTime)
|
.format(satPass.pass.startTime)
|
||||||
losTime.text =
|
binding.passLeoLosTime.text =
|
||||||
SimpleDateFormat(context.getString(R.string.pass_dateTime), Locale.getDefault())
|
SimpleDateFormat(context.getString(R.string.pass_dateTime), Locale.getDefault())
|
||||||
.format(satPass.pass.endTime)
|
.format(satPass.pass.endTime)
|
||||||
progressBar.progress = satPass.progress
|
binding.passLeoProgress.progress = satPass.progress
|
||||||
|
|
||||||
itemView.setOnClickListener {
|
itemView.setOnClickListener {
|
||||||
viewModel.satPassList.value?.let {
|
viewModel.satPassList.value?.let {
|
||||||
@@ -145,22 +132,19 @@ class SatPassAdapter(val viewModel: MainViewModel) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class SatPassGeoHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
inner class SatPassGeoHolder(itemView: View, private val binding: ItemPassGeoBinding) :
|
||||||
|
RecyclerView.ViewHolder(itemView) {
|
||||||
private val context: Context = itemView.context
|
|
||||||
private val satName = itemView.findViewById<TextView>(R.id.pass_geo_name)
|
|
||||||
private val satId = itemView.findViewById<TextView>(R.id.pass_geo_id)
|
|
||||||
private val satAz = itemView.findViewById<TextView>(R.id.pass_geo_az)
|
|
||||||
private val satEl = itemView.findViewById<TextView>(R.id.pass_geo_el)
|
|
||||||
|
|
||||||
fun bind(satPass: SatPass) {
|
fun bind(satPass: SatPass) {
|
||||||
|
val context: Context = itemView.context
|
||||||
val satPos = satPass.predictor.getSatPos(satPass.pass.startTime)
|
val satPos = satPass.predictor.getSatPos(satPass.pass.startTime)
|
||||||
val azimuth = satPos.azimuth * 180 / Math.PI
|
val azimuth = satPos.azimuth * 180 / Math.PI
|
||||||
|
|
||||||
satName.text = satPass.tle.name
|
binding.passGeoName.text = satPass.tle.name
|
||||||
satId.text = String.format(context.getString(R.string.pass_satId), satPass.tle.catnum)
|
binding.passGeoId.text =
|
||||||
satAz.text = String.format(context.getString(R.string.pat_azimuth), azimuth)
|
String.format(context.getString(R.string.pass_satId), satPass.tle.catnum)
|
||||||
satEl.text =
|
binding.passGeoAz.text = String.format(context.getString(R.string.pat_azimuth), azimuth)
|
||||||
|
binding.passGeoEl.text =
|
||||||
String.format(context.getString(R.string.pat_elevation), satPass.pass.maxEl)
|
String.format(context.getString(R.string.pat_elevation), satPass.pass.maxEl)
|
||||||
|
|
||||||
itemView.setOnClickListener {
|
itemView.setOnClickListener {
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ import android.content.Context
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.TextView
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
|
import com.rtbishop.look4sat.databinding.ItemTransmitterBinding
|
||||||
import com.rtbishop.look4sat.repo.Transmitter
|
import com.rtbishop.look4sat.repo.Transmitter
|
||||||
|
|
||||||
class TransmitterAdapter : RecyclerView.Adapter<TransmitterAdapter.TransmitterHolder>() {
|
class TransmitterAdapter : RecyclerView.Adapter<TransmitterAdapter.TransmitterHolder>() {
|
||||||
@@ -41,72 +41,69 @@ class TransmitterAdapter : RecyclerView.Adapter<TransmitterAdapter.TransmitterHo
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TransmitterHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TransmitterHolder {
|
||||||
val itemView = LayoutInflater
|
val binding = ItemTransmitterBinding
|
||||||
.from(parent.context)
|
.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
.inflate(R.layout.card_trans, parent, false)
|
return TransmitterHolder(binding.root, binding)
|
||||||
return TransmitterHolder(itemView)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: TransmitterHolder, position: Int) {
|
override fun onBindViewHolder(holder: TransmitterHolder, position: Int) {
|
||||||
holder.bind(transmittersList[position])
|
holder.bind(transmittersList[position])
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class TransmitterHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
inner class TransmitterHolder(itemView: View, private val binding: ItemTransmitterBinding) :
|
||||||
|
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) {
|
fun bind(transmitter: Transmitter) {
|
||||||
description.text = transmitter.description
|
val context: Context = itemView.context
|
||||||
|
val freqDivider = 1000000f
|
||||||
|
|
||||||
|
binding.transDescription.text = transmitter.description
|
||||||
|
|
||||||
if (transmitter.downlinkLow != null && transmitter.downlinkHigh == null) {
|
if (transmitter.downlinkLow != null && transmitter.downlinkHigh == null) {
|
||||||
downlink.text = String.format(
|
binding.transDownlink.text = String
|
||||||
context.getString(R.string.trans_down_low),
|
.format(
|
||||||
transmitter.downlinkLow / freqDivider
|
context.getString(R.string.trans_down_low),
|
||||||
)
|
transmitter.downlinkLow / freqDivider
|
||||||
|
)
|
||||||
} else if (transmitter.downlinkLow != null && transmitter.downlinkHigh != null) {
|
} else if (transmitter.downlinkLow != null && transmitter.downlinkHigh != null) {
|
||||||
downlink.text = String.format(
|
binding.transDownlink.text = String
|
||||||
context.getString(R.string.trans_down_lowHigh),
|
.format(
|
||||||
transmitter.downlinkLow / freqDivider,
|
context.getString(R.string.trans_down_lowHigh),
|
||||||
transmitter.downlinkHigh / freqDivider
|
transmitter.downlinkLow / freqDivider,
|
||||||
)
|
transmitter.downlinkHigh / freqDivider
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
downlink.text = context.getString(R.string.no_downlink)
|
binding.transDownlink.text = context.getString(R.string.no_downlink)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (transmitter.uplinkLow != null && transmitter.uplinkHigh == null) {
|
if (transmitter.uplinkLow != null && transmitter.uplinkHigh == null) {
|
||||||
uplink.text = String.format(
|
binding.transUplink.text = String.format(
|
||||||
context.getString(R.string.trans_up_low),
|
context.getString(R.string.trans_up_low),
|
||||||
transmitter.uplinkLow / freqDivider
|
transmitter.uplinkLow / freqDivider
|
||||||
)
|
)
|
||||||
} else if (transmitter.uplinkLow != null && transmitter.uplinkHigh != null) {
|
} else if (transmitter.uplinkLow != null && transmitter.uplinkHigh != null) {
|
||||||
uplink.text = String.format(
|
binding.transUplink.text = String.format(
|
||||||
context.getString(R.string.trans_up_lowHigh),
|
context.getString(R.string.trans_up_lowHigh),
|
||||||
transmitter.uplinkLow / freqDivider,
|
transmitter.uplinkLow / freqDivider,
|
||||||
transmitter.uplinkHigh / freqDivider
|
transmitter.uplinkHigh / freqDivider
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
uplink.text = context.getString(R.string.no_uplink)
|
binding.transUplink.text = context.getString(R.string.no_uplink)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (transmitter.mode != null) {
|
if (transmitter.mode != null) {
|
||||||
mode.text =
|
binding.transMode.text =
|
||||||
String.format(context.getString(R.string.trans_mode), transmitter.mode)
|
String.format(context.getString(R.string.trans_mode), transmitter.mode)
|
||||||
} else {
|
} else {
|
||||||
mode.text = context.getString(R.string.no_mode)
|
binding.transMode.text = context.getString(R.string.no_mode)
|
||||||
}
|
}
|
||||||
if (transmitter.isInverted) {
|
if (transmitter.isInverted) {
|
||||||
inverted.text = String.format(
|
binding.transInverted.text = String.format(
|
||||||
context.getString(R.string.trans_inverted),
|
context.getString(R.string.trans_inverted),
|
||||||
context.getString(R.string.btn_yes)
|
context.getString(R.string.btn_yes)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
inverted.text = String.format(
|
binding.transInverted.text = String.format(
|
||||||
context.getString(R.string.trans_inverted),
|
context.getString(R.string.trans_inverted),
|
||||||
context.getString(R.string.btn_no)
|
context.getString(R.string.btn_no)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
tools:openDrawer="start">
|
tools:openDrawer="start">
|
||||||
|
|
||||||
<include
|
<include
|
||||||
|
android:id="@+id/include_app_bar"
|
||||||
layout="@layout/app_bar_main"
|
layout="@layout/app_bar_main"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent" />
|
||||||
|
|||||||
@@ -64,6 +64,8 @@
|
|||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
<include layout="@layout/content_main" />
|
<include
|
||||||
|
android:id="@+id/include_main_content"
|
||||||
|
layout="@layout/content_main" />
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
@@ -20,6 +20,7 @@
|
|||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.constraintlayout.widget.ConstraintLayout 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"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/drawer_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/ic_launcher_background"
|
android:background="@drawable/ic_launcher_background"
|
||||||
@@ -86,7 +87,7 @@
|
|||||||
android:text="@string/pat_location"
|
android:text="@string/pat_location"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.1"
|
app:layout_constraintHorizontal_bias="0.1"
|
||||||
app:layout_constraintStart_toEndOf="@+id/barrier"
|
app:layout_constraintStart_toEndOf="@+id/mainBarrier"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/drawer_lat_value" />
|
app:layout_constraintTop_toBottomOf="@+id/drawer_lat_value" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatButton
|
<androidx.appcompat.widget.AppCompatButton
|
||||||
@@ -131,14 +132,14 @@
|
|||||||
android:drawableEnd="@drawable/ic_goto_github"
|
android:drawableEnd="@drawable/ic_goto_github"
|
||||||
android:text="@string/goto_github"
|
android:text="@string/goto_github"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/guidelineBottom"
|
app:layout_constraintBottom_toTopOf="@+id/guidelineBottom"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/guideline_center"
|
app:layout_constraintEnd_toStartOf="@+id/guidelineCenter"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
app:layout_constraintHorizontal_chainStyle="spread_inside"
|
app:layout_constraintHorizontal_chainStyle="spread_inside"
|
||||||
app:layout_constraintStart_toStartOf="@+id/guidelineLeft"
|
app:layout_constraintStart_toStartOf="@+id/guidelineLeft"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/drawer_btn_trans" />
|
app:layout_constraintTop_toBottomOf="@+id/drawer_btn_trans" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatButton
|
<androidx.appcompat.widget.AppCompatButton
|
||||||
android:id="@+id/drawer_btn_exit"
|
android:id="@+id/drawerBtnExit"
|
||||||
style="@style/DrawerHeader.Button"
|
style="@style/DrawerHeader.Button"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_marginStart="1dp"
|
android:layout_marginStart="1dp"
|
||||||
@@ -147,17 +148,17 @@
|
|||||||
app:layout_constraintBaseline_toBaselineOf="@+id/drawer_btn_github"
|
app:layout_constraintBaseline_toBaselineOf="@+id/drawer_btn_github"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/guidelineRight"
|
app:layout_constraintEnd_toStartOf="@+id/guidelineRight"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
app:layout_constraintStart_toStartOf="@+id/guideline_center" />
|
app:layout_constraintStart_toStartOf="@+id/guidelineCenter" />
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.Guideline
|
<androidx.constraintlayout.widget.Guideline
|
||||||
android:id="@+id/guideline_center"
|
android:id="@+id/guidelineCenter"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
app:layout_constraintGuide_percent="0.5" />
|
app:layout_constraintGuide_percent="0.5" />
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.Barrier
|
<androidx.constraintlayout.widget.Barrier
|
||||||
android:id="@+id/barrier"
|
android:id="@+id/mainBarrier"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:barrierDirection="end"
|
app:barrierDirection="end"
|
||||||
|
|||||||
@@ -29,19 +29,19 @@
|
|||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/about_title"
|
android:id="@+id/tv_about_title"
|
||||||
style="@style/AboutTitle"
|
style="@style/AboutTitle"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="16dp"
|
||||||
android:text="@string/app_name"
|
android:text="@string/app_name"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/about_title_img"
|
app:layout_constraintBottom_toBottomOf="@+id/img_about"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
app:layout_constraintStart_toEndOf="@+id/about_title_img"
|
app:layout_constraintStart_toEndOf="@+id/img_about"
|
||||||
app:layout_constraintTop_toTopOf="@+id/about_title_img" />
|
app:layout_constraintTop_toTopOf="@+id/img_about" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/about_title_img"
|
android:id="@+id/img_about"
|
||||||
android:layout_width="42dp"
|
android:layout_width="42dp"
|
||||||
android:layout_height="42dp"
|
android:layout_height="42dp"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
@@ -49,14 +49,14 @@
|
|||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:contentDescription="@string/placeholder"
|
android:contentDescription="@string/placeholder"
|
||||||
android:src="@drawable/ic_sputnik"
|
android:src="@drawable/ic_sputnik"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/about_title"
|
app:layout_constraintEnd_toStartOf="@+id/tv_about_title"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
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="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/about_title_version"
|
android:id="@+id/tv_about_version"
|
||||||
style="@style/AboutSubtitle"
|
style="@style/AboutSubtitle"
|
||||||
android:layout_marginStart="32dp"
|
android:layout_marginStart="32dp"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
@@ -64,10 +64,10 @@
|
|||||||
android:text="@string/app_version"
|
android:text="@string/app_version"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/about_title" />
|
app:layout_constraintTop_toBottomOf="@+id/tv_about_title" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/about_subtitle"
|
android:id="@+id/tv_about_subtitle"
|
||||||
style="@style/AboutSubtitle"
|
style="@style/AboutSubtitle"
|
||||||
android:layout_marginStart="32dp"
|
android:layout_marginStart="32dp"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
@@ -75,19 +75,19 @@
|
|||||||
android:text="@string/about_subtitle"
|
android:text="@string/about_subtitle"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/about_title_version" />
|
app:layout_constraintTop_toBottomOf="@+id/tv_about_version" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/about_thanks"
|
android:id="@+id/tv_about_thanks"
|
||||||
style="@style/AboutSubtitle"
|
style="@style/AboutSubtitle"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:text="@string/about_thanks_to"
|
android:text="@string/about_thanks_to"
|
||||||
app:layout_constraintEnd_toEndOf="@+id/about_subtitle"
|
app:layout_constraintEnd_toEndOf="@+id/tv_about_subtitle"
|
||||||
app:layout_constraintStart_toStartOf="@+id/about_subtitle"
|
app:layout_constraintStart_toStartOf="@+id/tv_about_subtitle"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/about_subtitle" />
|
app:layout_constraintTop_toBottomOf="@+id/tv_about_subtitle" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/about_thanks_to"
|
android:id="@+id/tv_about_message"
|
||||||
style="@style/AboutRegular"
|
style="@style/AboutRegular"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
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"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/about_thanks" />
|
app:layout_constraintTop_toBottomOf="@+id/tv_about_thanks" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
tools:context=".ui.MapViewFragment">
|
tools:context=".ui.MapViewFragment">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/map_frame"
|
android:id="@+id/frameMap"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="@drawable/worldmap_bg_dark"
|
android:background="@drawable/worldmap_bg_dark"
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
android:id="@+id/map_fab"
|
android:id="@+id/fabMap"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="bottom|start"
|
android:layout_gravity="bottom|start"
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
app:srcCompat="@drawable/ic_sat_asc_right" />
|
app:srcCompat="@drawable/ic_sat_asc_right" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/map_lat"
|
android:id="@+id/tvMapLat"
|
||||||
style="@style/MapText"
|
style="@style/MapText"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:layout_marginTop="4dp"
|
android:layout_marginTop="4dp"
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/map_lon"
|
android:id="@+id/tvMapLon"
|
||||||
style="@style/MapText"
|
style="@style/MapText"
|
||||||
android:layout_marginTop="4dp"
|
android:layout_marginTop="4dp"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/map_rng"
|
android:id="@+id/tvMapRng"
|
||||||
style="@style/MapText"
|
style="@style/MapText"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:layout_marginBottom="4dp"
|
android:layout_marginBottom="4dp"
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout 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/pass_list_refresh"
|
android:id="@+id/refLayoutPassList"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/pass_list_recycler"
|
android:id="@+id/recPassList"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:paddingBottom="4dp"
|
android:paddingBottom="4dp"
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
</androidx.recyclerview.widget.RecyclerView>
|
</androidx.recyclerview.widget.RecyclerView>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/pass_info_layout"
|
android:id="@+id/layoutInfo"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:visibility="visible"
|
android:visibility="visible"
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
app:layout_constraintTop_toTopOf="parent">
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/info_swipe_img"
|
android:id="@+id/imgInfoSwipe"
|
||||||
android:layout_width="36dp"
|
android:layout_width="36dp"
|
||||||
android:layout_height="36dp"
|
android:layout_height="36dp"
|
||||||
android:contentDescription="@string/placeholder"
|
android:contentDescription="@string/placeholder"
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
app:srcCompat="@drawable/ic_arrow_swipe" />
|
app:srcCompat="@drawable/ic_arrow_swipe" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/info_swipe_text"
|
android:id="@+id/tvInfoSwipe"
|
||||||
style="@style/PassInfoText"
|
style="@style/PassInfoText"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@@ -70,10 +70,10 @@
|
|||||||
android:text="@string/info_swipe_text"
|
android:text="@string/info_swipe_text"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/guideRight"
|
app:layout_constraintEnd_toStartOf="@+id/guideRight"
|
||||||
app:layout_constraintStart_toStartOf="@+id/guideLeft"
|
app:layout_constraintStart_toStartOf="@+id/guideLeft"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/info_swipe_img" />
|
app:layout_constraintTop_toBottomOf="@+id/imgInfoSwipe" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/info_img_sputnik"
|
android:id="@+id/imgInfoSputnik"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
@@ -81,22 +81,22 @@
|
|||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="16dp"
|
||||||
android:layout_marginBottom="16dp"
|
android:layout_marginBottom="16dp"
|
||||||
android:contentDescription="@string/placeholder"
|
android:contentDescription="@string/placeholder"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/info_main_text"
|
app:layout_constraintBottom_toTopOf="@+id/tvInfoMain"
|
||||||
app:layout_constraintDimensionRatio="1:1"
|
app:layout_constraintDimensionRatio="1:1"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/guideRight"
|
app:layout_constraintEnd_toStartOf="@+id/guideRight"
|
||||||
app:layout_constraintStart_toStartOf="@+id/guideLeft"
|
app:layout_constraintStart_toStartOf="@+id/guideLeft"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/info_swipe_text"
|
app:layout_constraintTop_toBottomOf="@+id/tvInfoSwipe"
|
||||||
app:layout_constraintVertical_chainStyle="packed"
|
app:layout_constraintVertical_chainStyle="packed"
|
||||||
app:srcCompat="@drawable/ic_sputnik" />
|
app:srcCompat="@drawable/ic_sputnik" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/info_main_text"
|
android:id="@+id/tvInfoMain"
|
||||||
style="@style/PassInfoText"
|
style="@style/PassInfoText"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="@string/info_main_text"
|
android:text="@string/info_main_text"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/info_select_text"
|
app:layout_constraintBottom_toTopOf="@+id/tvSatSelect"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/guideRight"
|
app:layout_constraintEnd_toStartOf="@+id/guideRight"
|
||||||
app:layout_constraintStart_toStartOf="@+id/guideLeft"
|
app:layout_constraintStart_toStartOf="@+id/guideLeft"
|
||||||
app:layout_constraintTop_toTopOf="@+id/guideCenter"
|
app:layout_constraintTop_toTopOf="@+id/guideCenter"
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
app:layout_constraintVertical_chainStyle="spread" />
|
app:layout_constraintVertical_chainStyle="spread" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/info_select_text"
|
android:id="@+id/tvSatSelect"
|
||||||
style="@style/PassInfoText"
|
style="@style/PassInfoText"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@@ -152,7 +152,7 @@
|
|||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
android:id="@+id/pass_list_fab"
|
android:id="@+id/fabSatSelect"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="bottom|end"
|
android:layout_gravity="bottom|end"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
tools:context=".ui.PolarViewFragment">
|
tools:context=".ui.PolarViewFragment">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/polar_view_frame"
|
android:id="@+id/frame_polar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
app:layout_constraintDimensionRatio="1:1"
|
app:layout_constraintDimensionRatio="1:1"
|
||||||
@@ -34,49 +34,49 @@
|
|||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/polar_azimuth"
|
android:id="@+id/tv_polar_az"
|
||||||
style="@style/PolarViewText"
|
style="@style/PolarViewText"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:text="@string/pat_azimuth"
|
android:text="@string/pat_azimuth"
|
||||||
app:layout_constraintStart_toStartOf="@+id/polar_view_frame"
|
app:layout_constraintStart_toStartOf="@+id/frame_polar"
|
||||||
app:layout_constraintTop_toTopOf="@+id/polar_view_frame" />
|
app:layout_constraintTop_toTopOf="@+id/frame_polar" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/polar_elevation"
|
android:id="@+id/tv_polar_el"
|
||||||
style="@style/PolarViewText"
|
style="@style/PolarViewText"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:text="@string/pat_elevation"
|
android:text="@string/pat_elevation"
|
||||||
app:layout_constraintEnd_toEndOf="@+id/polar_view_frame"
|
app:layout_constraintEnd_toEndOf="@+id/frame_polar"
|
||||||
app:layout_constraintTop_toTopOf="@+id/polar_view_frame" />
|
app:layout_constraintTop_toTopOf="@+id/frame_polar" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/polar_altitude"
|
android:id="@+id/tv_polar_alt"
|
||||||
style="@style/PolarViewText"
|
style="@style/PolarViewText"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:text="@string/pat_altitude"
|
android:text="@string/pat_altitude"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/polar_view_frame"
|
app:layout_constraintBottom_toBottomOf="@+id/frame_polar"
|
||||||
app:layout_constraintStart_toStartOf="@+id/polar_view_frame" />
|
app:layout_constraintStart_toStartOf="@+id/frame_polar" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/polar_range"
|
android:id="@+id/tv_polar_rng"
|
||||||
style="@style/PolarViewText"
|
style="@style/PolarViewText"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:text="@string/pat_range"
|
android:text="@string/pat_range"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/polar_view_frame"
|
app:layout_constraintBottom_toBottomOf="@+id/frame_polar"
|
||||||
app:layout_constraintEnd_toEndOf="@+id/polar_view_frame" />
|
app:layout_constraintEnd_toEndOf="@+id/frame_polar" />
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/polar_recycler"
|
android:id="@+id/rec_polar"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:paddingBottom="4dp"
|
android:paddingBottom="4dp"
|
||||||
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"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/polar_view_frame" />
|
app:layout_constraintTop_toBottomOf="@+id/frame_polar" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/polar_no_trans"
|
android:id="@+id/tv_polar_noTrans"
|
||||||
style="@style/PolarViewText"
|
style="@style/PolarViewText"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
@@ -86,5 +86,5 @@
|
|||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/polar_view_frame" />
|
app:layout_constraintTop_toBottomOf="@+id/frame_polar" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
+2
-2
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
<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/card_pass_geo"
|
android:id="@+id/pass_geo_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"
|
android:layout_marginStart="4dp"
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/pass_geo_background"
|
android:id="@+id/pass_geo_bg"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:contentDescription="@string/placeholder"
|
android:contentDescription="@string/placeholder"
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
<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/card_pass"
|
android:id="@+id/pass_leo_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"
|
android:layout_marginStart="4dp"
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/pass_background"
|
android:id="@+id/pass_leo_bg"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:contentDescription="@string/placeholder"
|
android:contentDescription="@string/placeholder"
|
||||||
@@ -44,86 +44,86 @@
|
|||||||
app:srcCompat="@drawable/card_pass_bg" />
|
app:srcCompat="@drawable/card_pass_bg" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/pass_losAz"
|
android:id="@+id/pass_leo_losAz"
|
||||||
style="@style/CardPassText"
|
style="@style/CardPassText"
|
||||||
android:text="@string/pass_los_az"
|
android:text="@string/pass_los_az"
|
||||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_maxEl"
|
app:layout_constraintBaseline_toBaselineOf="@+id/pass_leo_maxEl"
|
||||||
app:layout_constraintEnd_toEndOf="@+id/pass_progress"
|
app:layout_constraintEnd_toEndOf="@+id/pass_leo_progress"
|
||||||
app:layout_constraintHorizontal_bias="1.0"
|
app:layout_constraintHorizontal_bias="1.0"
|
||||||
app:layout_constraintStart_toEndOf="@+id/pass_maxEl" />
|
app:layout_constraintStart_toEndOf="@+id/pass_leo_maxEl" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/pass_satId"
|
android:id="@+id/pass_leo_satId"
|
||||||
style="@style/CardPassName"
|
style="@style/CardPassName"
|
||||||
android:layout_marginTop="4dp"
|
android:layout_marginTop="4dp"
|
||||||
android:text="@string/pass_satId"
|
android:text="@string/pass_satId"
|
||||||
app:layout_constraintEnd_toEndOf="@+id/pass_progress"
|
app:layout_constraintEnd_toEndOf="@+id/pass_leo_progress"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/pass_maxEl"
|
android:id="@+id/pass_leo_maxEl"
|
||||||
style="@style/CardPassText"
|
style="@style/CardPassText"
|
||||||
android:layout_marginTop="2dp"
|
android:layout_marginTop="2dp"
|
||||||
android:text="@string/pass_maxEl"
|
android:text="@string/pass_maxEl"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/pass_satId" />
|
app:layout_constraintTop_toBottomOf="@+id/pass_leo_satId" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/pass_img"
|
android:id="@+id/pass_leo_img"
|
||||||
android:layout_width="20dp"
|
android:layout_width="20dp"
|
||||||
android:layout_height="20dp"
|
android:layout_height="20dp"
|
||||||
android:contentDescription="@string/placeholder"
|
android:contentDescription="@string/placeholder"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/pass_satName"
|
app:layout_constraintBottom_toBottomOf="@+id/pass_leo_satName"
|
||||||
app:layout_constraintStart_toStartOf="@+id/pass_progress"
|
app:layout_constraintStart_toStartOf="@+id/pass_leo_progress"
|
||||||
app:layout_constraintTop_toTopOf="@+id/pass_satName"
|
app:layout_constraintTop_toTopOf="@+id/pass_leo_satName"
|
||||||
app:srcCompat="@drawable/ic_pass_inactive" />
|
app:srcCompat="@drawable/ic_pass_inactive" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/pass_satName"
|
android:id="@+id/pass_leo_satName"
|
||||||
style="@style/CardPassName"
|
style="@style/CardPassName"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/pass_satName"
|
android:text="@string/pass_satName"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/pass_satId"
|
app:layout_constraintBottom_toBottomOf="@+id/pass_leo_satId"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/pass_satId"
|
app:layout_constraintEnd_toStartOf="@+id/pass_leo_satId"
|
||||||
app:layout_constraintHorizontal_bias="0.02"
|
app:layout_constraintHorizontal_bias="0.02"
|
||||||
app:layout_constraintStart_toEndOf="@+id/pass_img"
|
app:layout_constraintStart_toEndOf="@+id/pass_leo_img"
|
||||||
app:layout_constraintTop_toTopOf="@+id/pass_satId" />
|
app:layout_constraintTop_toTopOf="@+id/pass_leo_satId" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/pass_aosAz"
|
android:id="@+id/pass_leo_aosAz"
|
||||||
style="@style/CardPassText"
|
style="@style/CardPassText"
|
||||||
android:text="@string/pass_aos_az"
|
android:text="@string/pass_aos_az"
|
||||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_maxEl"
|
app:layout_constraintBaseline_toBaselineOf="@+id/pass_leo_maxEl"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/pass_maxEl"
|
app:layout_constraintEnd_toStartOf="@+id/pass_leo_maxEl"
|
||||||
app:layout_constraintHorizontal_bias="0.0"
|
app:layout_constraintHorizontal_bias="0.0"
|
||||||
app:layout_constraintStart_toStartOf="@+id/pass_progress" />
|
app:layout_constraintStart_toStartOf="@+id/pass_leo_progress" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/pass_aosTime"
|
android:id="@+id/pass_leo_aosTime"
|
||||||
style="@style/CardPassText"
|
style="@style/CardPassText"
|
||||||
android:text="@string/pass_dateTime"
|
android:text="@string/pass_dateTime"
|
||||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_losTime"
|
app:layout_constraintBaseline_toBaselineOf="@+id/pass_leo_losTime"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/pass_losTime"
|
app:layout_constraintEnd_toStartOf="@+id/pass_leo_losTime"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
app:layout_constraintHorizontal_chainStyle="spread_inside"
|
app:layout_constraintHorizontal_chainStyle="spread_inside"
|
||||||
app:layout_constraintStart_toStartOf="@+id/pass_progress" />
|
app:layout_constraintStart_toStartOf="@+id/pass_leo_progress" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/pass_losTime"
|
android:id="@+id/pass_leo_losTime"
|
||||||
style="@style/CardPassText"
|
style="@style/CardPassText"
|
||||||
android:layout_marginBottom="4dp"
|
android:layout_marginBottom="4dp"
|
||||||
android:text="@string/pass_dateTime"
|
android:text="@string/pass_dateTime"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="@+id/pass_progress"
|
app:layout_constraintEnd_toEndOf="@+id/pass_leo_progress"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
app:layout_constraintStart_toEndOf="@+id/pass_aosTime"
|
app:layout_constraintStart_toEndOf="@+id/pass_leo_aosTime"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/pass_progress" />
|
app:layout_constraintTop_toBottomOf="@+id/pass_leo_progress" />
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
android:id="@+id/pass_progress"
|
android:id="@+id/pass_leo_progress"
|
||||||
style="?android:attr/progressBarStyleHorizontal"
|
style="?android:attr/progressBarStyleHorizontal"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="14dp"
|
android:layout_height="14dp"
|
||||||
@@ -131,7 +131,7 @@
|
|||||||
android:layout_marginEnd="6dp"
|
android:layout_marginEnd="6dp"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/pass_maxEl" />
|
app:layout_constraintTop_toBottomOf="@+id/pass_leo_maxEl" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</com.google.android.material.card.MaterialCardView>
|
</com.google.android.material.card.MaterialCardView>
|
||||||
+1
-1
@@ -18,7 +18,7 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
|
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/sat_entry_item"
|
android:id="@+id/sat_entry_checkbox"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="36dp"
|
android:layout_height="36dp"
|
||||||
android:text="@string/placeholder"
|
android:text="@string/placeholder"
|
||||||
+1
-1
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
<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/card_trans"
|
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"
|
android:layout_marginStart="4dp"
|
||||||
+3
-2
@@ -45,6 +45,7 @@ task clean(type: Delete) {
|
|||||||
|
|
||||||
ext {
|
ext {
|
||||||
material = '1.2.0-alpha05'
|
material = '1.2.0-alpha05'
|
||||||
|
appCompat = '1.1.0'
|
||||||
supportLib = '1.0.0'
|
supportLib = '1.0.0'
|
||||||
constraintLayout = '1.1.3'
|
constraintLayout = '1.1.3'
|
||||||
|
|
||||||
@@ -56,9 +57,9 @@ ext {
|
|||||||
|
|
||||||
room = '2.2.4'
|
room = '2.2.4'
|
||||||
|
|
||||||
retrofit = '2.6.2'
|
retrofit = '2.7.1'
|
||||||
|
|
||||||
dagger = '2.25.2'
|
dagger = '2.26'
|
||||||
|
|
||||||
predict4java = '1.3.1'
|
predict4java = '1.3.1'
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user