diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 36a69809..25a7bb20 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,7 +14,7 @@
android:label="@string/app_name"
android:theme="@style/Theme.Look4Sat.Main">
@@ -24,4 +24,4 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/Look4SatActivity.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/MainActivity.kt
similarity index 89%
rename from app/src/main/java/com/rtbishop/look4sat/presentation/Look4SatActivity.kt
rename to app/src/main/java/com/rtbishop/look4sat/presentation/MainActivity.kt
index 8d4ed819..fac74185 100644
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/Look4SatActivity.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/MainActivity.kt
@@ -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()
}
}
diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/MainViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/MainViewModel.kt
new file mode 100644
index 00000000..148065f8
--- /dev/null
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/MainViewModel.kt
@@ -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)
+ }
+ }
+}
diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragment.kt
index 7a6f199c..e24706b5 100644
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragment.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragment.kt
@@ -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)
})
}
diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesFragment.kt
index 2a50afad..ca69b4a2 100644
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesFragment.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesFragment.kt
@@ -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>(R.id.nav_passes, "prefs") { prefs ->
passesViewModel.forceCalculation(prefs.first, prefs.second)
diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarFragment.kt
index c4c650bc..a7b6f21b 100644
--- a/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarFragment.kt
+++ b/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarFragment.kt
@@ -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()
+ }
}
diff --git a/app/src/main/res/drawable/item_divider.xml b/app/src/main/res/drawable/item_divider.xml
new file mode 100644
index 00000000..2b4c712d
--- /dev/null
+++ b/app/src/main/res/drawable/item_divider.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rounded_corners.xml b/app/src/main/res/drawable/rounded_corners.xml
index 1394ce5a..ebcb0d84 100644
--- a/app/src/main/res/drawable/rounded_corners.xml
+++ b/app/src/main/res/drawable/rounded_corners.xml
@@ -1,8 +1,8 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/card_prefs_about.xml b/app/src/main/res/layout/card_prefs_about.xml
index 49b28fb8..281a79d2 100644
--- a/app/src/main/res/layout/card_prefs_about.xml
+++ b/app/src/main/res/layout/card_prefs_about.xml
@@ -1,95 +1,102 @@
-
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/card_prefs_location.xml b/app/src/main/res/layout/card_prefs_location.xml
index aa03660b..9289f26b 100644
--- a/app/src/main/res/layout/card_prefs_location.xml
+++ b/app/src/main/res/layout/card_prefs_location.xml
@@ -1,84 +1,91 @@
-
-
+
-
+
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/card_prefs_other.xml b/app/src/main/res/layout/card_prefs_other.xml
index f5a01bb9..19563b82 100644
--- a/app/src/main/res/layout/card_prefs_other.xml
+++ b/app/src/main/res/layout/card_prefs_other.xml
@@ -1,56 +1,63 @@
-
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/card_prefs_tracking.xml b/app/src/main/res/layout/card_prefs_tracking.xml
index ef111af9..08543e2d 100644
--- a/app/src/main/res/layout/card_prefs_tracking.xml
+++ b/app/src/main/res/layout/card_prefs_tracking.xml
@@ -1,71 +1,78 @@
-
-
+
-
-
-
-
-
-
+ android:layout_marginStart="8dp"
+ android:layout_marginTop="8dp"
+ android:text="@string/tracking_title"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
-
-
-
-
+ android:layout_marginEnd="4dp"
+ android:minHeight="48dp"
+ android:text="@string/tracking_switch"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="@+id/tracking_title"
+ app:layout_constraintTop_toBottomOf="@+id/tracking_title" />
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/card_prefs_update.xml b/app/src/main/res/layout/card_prefs_update.xml
index 1008a47c..e4d53c77 100644
--- a/app/src/main/res/layout/card_prefs_update.xml
+++ b/app/src/main/res/layout/card_prefs_update.xml
@@ -1,59 +1,66 @@
-
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/card_prefs_warranty.xml b/app/src/main/res/layout/card_prefs_warranty.xml
index 604fb2a2..bfb76fd5 100644
--- a/app/src/main/res/layout/card_prefs_warranty.xml
+++ b/app/src/main/res/layout/card_prefs_warranty.xml
@@ -1,43 +1,50 @@
-
-
+
-
+
-
+
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_entries.xml b/app/src/main/res/layout/fragment_entries.xml
index 7d3a755c..a25ccb83 100644
--- a/app/src/main/res/layout/fragment_entries.xml
+++ b/app/src/main/res/layout/fragment_entries.xml
@@ -13,56 +13,49 @@
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent">
-
+
-
+
-
+
+
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_map.xml b/app/src/main/res/layout/fragment_map.xml
index 1f927827..1674d396 100644
--- a/app/src/main/res/layout/fragment_map.xml
+++ b/app/src/main/res/layout/fragment_map.xml
@@ -15,25 +15,21 @@
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent">
-
+
-
+
+
+
+ android:layout_height="match_parent" />
+ android:layout_height="match_parent">
-
+ app:layout_constraintTop_toTopOf="parent">
-
+
-
+
-
+
+
+
-
-
+
+
+
@@ -14,31 +13,38 @@
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent">
-
+
+
+
+
+
+
+
-
-
+ android:id="@+id/radar_name"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="8dp"
+ android:layout_marginEnd="8dp"
+ android:gravity="center"
+ android:textSize="16sp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/radar_toolbar" />
-
-
+ app:layout_constraintTop_toBottomOf="@+id/radar_name" />
+ app:layout_constraintStart_toStartOf="@+id/radar_card"
+ app:layout_constraintTop_toTopOf="@+id/radar_card" />
+ app:layout_constraintEnd_toEndOf="@+id/radar_card"
+ app:layout_constraintTop_toTopOf="@+id/radar_card" />
+ app:layout_constraintBottom_toBottomOf="@+id/radar_card"
+ app:layout_constraintStart_toStartOf="@+id/radar_card" />
+ app:layout_constraintBottom_toBottomOf="@+id/radar_card"
+ app:layout_constraintEnd_toEndOf="@+id/radar_card" />
-
+ app:layout_constraintTop_toBottomOf="@+id/radar_recycler_msg">
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/radar_card" />
-
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index e0a5e76e..f467c379 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -12,24 +12,21 @@
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent">
-
+
-
+
+
+
-
+ app:layout_constraintTop_toTopOf="parent" />
-
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@+id/prefs_info" />
-
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@+id/prefs_location" />
-
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@+id/prefs_data" />
-
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@+id/prefs_tracking" />
-
-
-
-
-
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@+id/prefs_other" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_entry.xml b/app/src/main/res/layout/item_entry.xml
index fa182386..f0e5466d 100644
--- a/app/src/main/res/layout/item_entry.xml
+++ b/app/src/main/res/layout/item_entry.xml
@@ -1,15 +1,7 @@
+ android:id="@+id/entry_card"
+ style="@style/ListItemCard">
+ style="@style/ListItemCard">
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_source.xml b/app/src/main/res/layout/item_source.xml
index 26436df3..1b3157ac 100644
--- a/app/src/main/res/layout/item_source.xml
+++ b/app/src/main/res/layout/item_source.xml
@@ -35,4 +35,4 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/source_input" />
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_trans.xml b/app/src/main/res/layout/item_trans.xml
index da790ed0..706ba2cd 100644
--- a/app/src/main/res/layout/item_trans.xml
+++ b/app/src/main/res/layout/item_trans.xml
@@ -2,10 +2,8 @@
+ style="@style/ListItemCard"
+ android:layout_marginBottom="1dp">
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index 3d1f3c3f..c8013f51 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -30,11 +30,6 @@
android:id="@+id/nav_radar"
android:name="com.rtbishop.look4sat.presentation.radarScreen.RadarFragment"
tools:layout="@layout/fragment_radar">
-
-
-
-
-
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 3cf569a2..0c20d14a 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -1,6 +1,7 @@
- 0dp
- 8dp
- 0dp
+ 0dp
+ 8dp
+ 0dp
+ 8dp
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 3d9bb361..99a2f570 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -17,6 +17,7 @@
- @color/surfaceBg
- @color/surfaceBg
- false
+ - @drawable/item_divider
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file