More changes to layouts, fragments and styles

This commit is contained in:
Arty Bishop committed 2022-01-23 17:01:59 +00:00
1 parent f9ebe84012
commit 38787b45c1
26 files changed
+783 -737

No files matched your search

@@ -20,13 +20,16 @@ package com.rtbishop.look4sat.presentation
import android.annotation.SuppressLint
import android.content.pm.ActivityInfo
import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import com.rtbishop.look4sat.databinding.ActivityMainBinding
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class Look4SatActivity : AppCompatActivity() {
class MainActivity : AppCompatActivity() {
private val mainViewModel: MainViewModel by viewModels()
@SuppressLint("SourceLockedOrientationActivity")
override fun onCreate(savedInstanceState: Bundle?) {
@@ -34,5 +37,6 @@ class Look4SatActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
installSplashScreen()
setContentView(ActivityMainBinding.inflate(layoutInflater).root)
mainViewModel.calculatePasses()
}
}
@@ -0,0 +1,30 @@
package com.rtbishop.look4sat.presentation
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.rtbishop.look4sat.domain.DataRepository
import com.rtbishop.look4sat.domain.predict.Predictor
import com.rtbishop.look4sat.framework.SettingsProvider
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
class MainViewModel @Inject constructor(
private val predictor: Predictor,
private val preferences: SettingsProvider,
private val dataRepository: DataRepository
) : ViewModel() {
fun calculatePasses(
hoursAhead: Int = preferences.getHoursAhead(),
minElevation: Double = preferences.getMinElevation(),
timeRef: Long = System.currentTimeMillis()
) {
viewModelScope.launch {
val satellites = dataRepository.getSelectedSatellites()
val stationPos = preferences.loadStationPosition()
predictor.forceCalculation(satellites, stationPos, timeRef, hoursAhead, minElevation)
}
}
}
@@ -24,8 +24,8 @@ import androidx.core.widget.doOnTextChanged
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.SimpleItemAnimator
import com.google.android.material.snackbar.Snackbar
import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
@@ -44,14 +44,16 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
}
private fun setupComponents(view: View) {
val entriesAdapter = EntriesAdapter(viewModel)
val context = requireContext()
val adapter = EntriesAdapter(viewModel)
val layoutManager = GridLayoutManager(context, 2)
val itemDecoration = DividerItemDecoration(context, layoutManager.orientation)
val binding = FragmentEntriesBinding.bind(view).apply {
entriesRecycler.apply {
setHasFixedSize(true)
adapter = entriesAdapter
layoutManager = GridLayoutManager(requireContext(), 2)
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
// addItemDecoration(ItemDivider(R.drawable.divider_dark))
this.adapter = adapter
this.layoutManager = layoutManager
addItemDecoration(itemDecoration)
}
entriesBack.setOnClickListener { findNavController().navigateUp() }
entriesSearch.doOnTextChanged { text, _, _, _ -> viewModel.setQuery(text.toString()) }
@@ -59,7 +61,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
entriesSelectAll.setOnClickListener { viewModel.selectCurrentItems() }
}
viewModel.satData.observe(viewLifecycleOwner, { satData ->
handleSatData(satData, binding, entriesAdapter)
handleSatData(satData, binding, adapter)
})
}
@@ -23,9 +23,9 @@ import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.SimpleItemAnimator
import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.databinding.FragmentPassesBinding
import com.rtbishop.look4sat.domain.model.DataState
@@ -47,14 +47,16 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
}
private fun setupComponents(view: View) {
val passesAdapter = PassesAdapter(passesViewModel.shouldUseUTC(), this)
val context = requireContext()
val adapter = PassesAdapter(passesViewModel.shouldUseUTC(), this)
val layoutManager = LinearLayoutManager(context)
val itemDecoration = DividerItemDecoration(context, layoutManager.orientation)
val binding = FragmentPassesBinding.bind(view).apply {
passesList.apply {
setHasFixedSize(true)
adapter = passesAdapter
isVerticalScrollBarEnabled = false
layoutManager = LinearLayoutManager(context)
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
this.adapter = adapter
this.layoutManager = layoutManager
addItemDecoration(itemDecoration)
addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
if (dy > 0 && passesFab.visibility == View.VISIBLE) passesFab.hide()
@@ -72,7 +74,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
passesFab.setOnClickListener { findNavController().navigate(R.id.nav_satellites) }
}
passesViewModel.passes.observe(viewLifecycleOwner, { passesResult ->
handleNewPasses(passesResult, passesAdapter, binding)
handleNewPasses(passesResult, adapter, binding)
})
getNavResult<Pair<Int, Double>>(R.id.nav_passes, "prefs") { prefs ->
passesViewModel.forceCalculation(prefs.first, prefs.second)
@@ -23,8 +23,8 @@ import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.SimpleItemAnimator
import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.databinding.FragmentRadarBinding
import com.rtbishop.look4sat.domain.predict.SatPass
@@ -45,30 +45,25 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupComponents(view)
}
private fun setupComponents(view: View) {
val context = requireContext()
val adapter = TransmittersAdapter()
val layoutManager = LinearLayoutManager(context)
val itemDecoration = DividerItemDecoration(context, layoutManager.orientation)
FragmentRadarBinding.bind(view).apply {
val transAdapter = TransmittersAdapter()
radarRecycler.apply {
setHasFixedSize(true)
adapter = transAdapter
isVerticalScrollBarEnabled = false
layoutManager = LinearLayoutManager(context)
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
// addItemDecoration(ItemDivider(R.drawable.divider_dark))
this.adapter = adapter
this.layoutManager = LinearLayoutManager(context)
addItemDecoration(itemDecoration)
}
setupObservers(transAdapter, this)
setupObservers(adapter, this)
}
}
override fun onResume() {
super.onResume()
viewModel.enableSensor()
}
override fun onPause() {
super.onPause()
viewModel.disableSensor()
}
private fun setupObservers(
transmittersAdapter: TransmittersAdapter,
binding: FragmentRadarBinding
@@ -80,7 +75,7 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
setShowAim(preferences.getUseCompass())
setScanning(preferences.getShowSweep())
}
binding.radarFrame.addView(radarView)
binding.radarCard.addView(radarView)
viewModel.radarData.observe(viewLifecycleOwner, { passData ->
radarView?.setPosition(passData.satPos)
radarView?.setPositions(passData.satTrack)
@@ -139,4 +134,14 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
binding.radarTimer.text = 0L.toTimerString()
}
}
override fun onResume() {
super.onResume()
viewModel.enableSensor()
}
override fun onPause() {
super.onPause()
viewModel.disableSensor()
}
}