mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-04 03:37:21 +00:00
Dependencies, resources and code cleanup
This commit is contained in:
1 parent
68d35f0104
commit
007e6d8f9d
33 files changed
+133
-295
No files matched your search
+20
-8
@@ -1,4 +1,4 @@
|
||||
package com.rtbishop.look4sat.presentation.bottomNav
|
||||
package com.rtbishop.look4sat.presentation
|
||||
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.height
|
||||
@@ -17,21 +17,30 @@ import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.rtbishop.look4sat.presentation.MainTheme
|
||||
import com.rtbishop.look4sat.presentation.aboutScreen.AboutScreen
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.presentation.entriesScreen.EntriesScreen
|
||||
import com.rtbishop.look4sat.presentation.mapScreen.MapScreen
|
||||
import com.rtbishop.look4sat.presentation.passesScreen.PassesScreen
|
||||
import com.rtbishop.look4sat.presentation.passesScreen.PassesViewModel
|
||||
import com.rtbishop.look4sat.presentation.radarScreen.RadarScreen
|
||||
import com.rtbishop.look4sat.presentation.settingsScreen.SettingsScreen
|
||||
|
||||
sealed class BottomNavItem(var title: String, var icon: Int, var screen_route: String) {
|
||||
object Satellites : BottomNavItem("Satellites", R.drawable.ic_satellite, "satellites")
|
||||
object Passes : BottomNavItem("Passes", R.drawable.ic_list, "passes")
|
||||
object Radar : BottomNavItem("Radar", R.drawable.ic_radar, "radar")
|
||||
object WorldMap : BottomNavItem("World Map", R.drawable.ic_world, "world_map")
|
||||
object Settings : BottomNavItem("Settings", R.drawable.ic_settings, "settings")
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun BottomNavBar(navController: NavController) {
|
||||
val items = listOf(
|
||||
BottomNavItem.Satellites,
|
||||
BottomNavItem.Passes,
|
||||
BottomNavItem.Radar,
|
||||
BottomNavItem.WorldMap,
|
||||
BottomNavItem.Settings,
|
||||
BottomNavItem.About
|
||||
BottomNavItem.Settings
|
||||
)
|
||||
NavigationBar(modifier = Modifier.height(48.dp)) {
|
||||
val navBackStackEntry by navController.currentBackStackEntryAsState()
|
||||
@@ -53,15 +62,18 @@ fun BottomNavBar(navController: NavController) {
|
||||
@Composable
|
||||
fun NavigationGraph(navController: NavHostController) {
|
||||
val navToPasses = { navController.navigate(BottomNavItem.Passes.screen_route) }
|
||||
val navToRadar = { navController.navigate(BottomNavItem.Radar.screen_route) }
|
||||
val passesViewModel: PassesViewModel = hiltViewModel()
|
||||
NavHost(navController, startDestination = BottomNavItem.Passes.screen_route) {
|
||||
composable(BottomNavItem.Satellites.screen_route) {
|
||||
EntriesScreen(navToPasses, passesViewModel = passesViewModel)
|
||||
}
|
||||
composable(BottomNavItem.Passes.screen_route) { PassesScreen(viewModel = passesViewModel) }
|
||||
composable(BottomNavItem.Passes.screen_route) {
|
||||
PassesScreen(navToRadar, viewModel = passesViewModel)
|
||||
}
|
||||
composable(BottomNavItem.Radar.screen_route) { RadarScreen() }
|
||||
composable(BottomNavItem.WorldMap.screen_route) { MapScreen() }
|
||||
composable(BottomNavItem.Settings.screen_route) {}
|
||||
composable(BottomNavItem.About.screen_route) { AboutScreen() }
|
||||
composable(BottomNavItem.Settings.screen_route) { SettingsScreen() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@ import android.view.View
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||
import com.rtbishop.look4sat.presentation.bottomNav.MainScreenView
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
|
||||
@AndroidEntryPoint
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
package com.rtbishop.look4sat.presentation.bottomNav
|
||||
|
||||
import com.rtbishop.look4sat.R
|
||||
|
||||
sealed class BottomNavItem(var title: String, var icon: Int, var screen_route: String) {
|
||||
object Satellites : BottomNavItem("Satellites", R.drawable.ic_satellite, "satellites")
|
||||
object Passes : BottomNavItem("Passes", R.drawable.ic_list, "passes")
|
||||
object WorldMap : BottomNavItem("World Map", R.drawable.ic_map, "world_map")
|
||||
object Settings : BottomNavItem("Settings", R.drawable.ic_settings, "settings")
|
||||
object About : BottomNavItem("About", R.drawable.ic_about, "about")
|
||||
}
|
||||
@@ -135,7 +135,7 @@ private fun SaveButton(saveSelection: () -> Unit, modifier: Modifier = Modifier)
|
||||
containerColor = MaterialTheme.colorScheme.primary,
|
||||
contentColor = MaterialTheme.colorScheme.onPrimary
|
||||
), shape = MaterialTheme.shapes.medium, modifier = modifier.width(96.dp)
|
||||
) { Icon(painter = painterResource(id = R.drawable.ic_done), contentDescription = null) }
|
||||
) { Icon(painter = painterResource(id = R.drawable.ic_checkmark), contentDescription = null) }
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
||||
@@ -4,6 +4,7 @@ package com.rtbishop.look4sat.presentation.passesScreen
|
||||
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
@@ -40,7 +41,7 @@ private val sdf = SimpleDateFormat("HH:mm:ss", Locale.ENGLISH)
|
||||
|
||||
@OptIn(ExperimentalMaterialApi::class)
|
||||
@Composable
|
||||
fun PassesScreen(viewModel: PassesViewModel = hiltViewModel()) {
|
||||
fun PassesScreen(navToRadar: () -> Unit, viewModel: PassesViewModel = hiltViewModel()) {
|
||||
val state = viewModel.passes.observeAsState()
|
||||
val timerText = viewModel.timerText.observeAsState()
|
||||
val isRefreshing = state.value is DataState.Loading
|
||||
@@ -92,7 +93,7 @@ fun PassesScreen(viewModel: PassesViewModel = hiltViewModel()) {
|
||||
)
|
||||
}
|
||||
}
|
||||
PassesCard(refreshState, isRefreshing, passes)
|
||||
PassesCard(refreshState, isRefreshing, passes, navToRadar)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,13 +105,15 @@ private fun PassPreview() {
|
||||
)
|
||||
val satellite = NearEarthSat(data)
|
||||
val pass = SatPass(1L, 25.0, 10L, 75.0, 850, 45.0, satellite, 0.5f)
|
||||
MainTheme { Pass(pass = pass) }
|
||||
MainTheme { Pass(pass = pass, {}) }
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun Pass(pass: SatPass, modifier: Modifier = Modifier) {
|
||||
private fun Pass(pass: SatPass, navToRadar: () -> Unit, modifier: Modifier = Modifier) {
|
||||
Surface(color = MaterialTheme.colorScheme.background, modifier = modifier) {
|
||||
Surface(modifier = Modifier.padding(bottom = 2.dp)) {
|
||||
Surface(modifier = Modifier
|
||||
.padding(bottom = 2.dp)
|
||||
.clickable { navToRadar() }) {
|
||||
Column(
|
||||
verticalArrangement = Arrangement.spacedBy(2.dp),
|
||||
modifier = Modifier
|
||||
@@ -196,13 +199,16 @@ private fun Pass(pass: SatPass, modifier: Modifier = Modifier) {
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
private fun PassesCard(
|
||||
refreshState: PullRefreshState, isRefreshing: Boolean, passes: List<SatPass>
|
||||
refreshState: PullRefreshState,
|
||||
isRefreshing: Boolean,
|
||||
passes: List<SatPass>,
|
||||
navToRadar: () -> Unit
|
||||
) {
|
||||
ElevatedCard(modifier = Modifier.fillMaxSize()) {
|
||||
Box(Modifier.pullRefresh(refreshState)) {
|
||||
LazyColumn(modifier = Modifier.fillMaxSize()) {
|
||||
items(items = passes, key = { item -> item.catNum + item.aosTime }) { pass ->
|
||||
Pass(pass, Modifier.animateItemPlacement())
|
||||
Pass(pass, navToRadar, Modifier.animateItemPlacement())
|
||||
}
|
||||
}
|
||||
PullRefreshIndicator(
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.rtbishop.look4sat.presentation.radarScreen
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import com.rtbishop.look4sat.R
|
||||
|
||||
@Composable
|
||||
fun RadarScreen(viewModel: RadarViewModel = hiltViewModel()) {
|
||||
|
||||
Column(modifier = Modifier.padding(6.dp), verticalArrangement = Arrangement.spacedBy(6.dp)) {
|
||||
ElevatedCard(modifier = Modifier.height(52.dp)) {
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
modifier = Modifier.fillMaxSize()
|
||||
) {
|
||||
IconButton(onClick = {}) {
|
||||
Icon(
|
||||
painter = painterResource(id = R.drawable.ic_filter),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
Column(
|
||||
verticalArrangement = Arrangement.SpaceEvenly, modifier = Modifier.weight(1f)
|
||||
) {
|
||||
Text(text = "Null")
|
||||
Text(text = "Null")
|
||||
}
|
||||
Text(
|
||||
text = "00:00:00",
|
||||
fontSize = 36.sp,
|
||||
fontWeight = FontWeight.Bold,
|
||||
color = MaterialTheme.colorScheme.primary,
|
||||
textAlign = TextAlign.End,
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.padding(bottom = 2.dp, end = 8.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
ElevatedCard(modifier = Modifier.fillMaxSize().weight(1f)) {
|
||||
|
||||
}
|
||||
ElevatedCard(modifier = Modifier.fillMaxSize().weight(1f)) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
-12
@@ -22,7 +22,6 @@ import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.text.method.LinkMovementMethod
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
@@ -31,7 +30,6 @@ import androidx.core.widget.doOnTextChanged
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.asLiveData
|
||||
import com.rtbishop.look4sat.BuildConfig
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.FragmentSettingsBinding
|
||||
import com.rtbishop.look4sat.domain.model.DataState
|
||||
@@ -81,8 +79,6 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
||||
settingsScroll.setOnScrollChangeListener(NestedScrollView.OnScrollChangeListener { _, _, y, _, newY ->
|
||||
if (y > newY) settingsFab.hide() else settingsFab.show()
|
||||
})
|
||||
settingsAbout.aboutVersion.text =
|
||||
String.format(getString(R.string.app_version), BuildConfig.VERSION_NAME)
|
||||
settingsBtnGithub.clickWithDebounce {
|
||||
gotoUrl("https://github.com/rt-bishop/Look4Sat/")
|
||||
}
|
||||
@@ -98,7 +94,6 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
||||
setupRemoteCard()
|
||||
setupBTCard()
|
||||
setupOtherCard()
|
||||
setupOutroCard()
|
||||
viewModel.stationPosition.asLiveData().observe(viewLifecycleOwner) { stationPos ->
|
||||
stationPos?.let { handleStationPosition(stationPos) }
|
||||
}
|
||||
@@ -225,13 +220,6 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupOutroCard() {
|
||||
binding.run {
|
||||
settingsOutro.outroThanks.movementMethod = LinkMovementMethod.getInstance()
|
||||
settingsOutro.outroLicense.movementMethod = LinkMovementMethod.getInstance()
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleStationPosition(pos: DataState<GeoPos>) {
|
||||
when (pos) {
|
||||
is DataState.Success -> {
|
||||
|
||||
+16
-16
@@ -1,4 +1,4 @@
|
||||
package com.rtbishop.look4sat.presentation.aboutScreen
|
||||
package com.rtbishop.look4sat.presentation.settingsScreen
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
@@ -24,11 +24,11 @@ import com.rtbishop.look4sat.presentation.gotoUrl
|
||||
private const val POLICY_URL = "https://sites.google.com/view/look4sat-privacy-policy/home"
|
||||
private const val LICENSE_URL = "https://www.gnu.org/licenses/gpl-3.0.html"
|
||||
private const val GITHUB_URL = "https://github.com/rt-bishop/Look4Sat/"
|
||||
private const val SUPPORT_URL = "https://ko-fi.com/rt_bishop"
|
||||
private const val DONATE_URL = "https://ko-fi.com/rt_bishop"
|
||||
private const val FDROID_URL = "https://f-droid.org/en/packages/com.rtbishop.look4sat/"
|
||||
|
||||
@Composable
|
||||
fun AboutScreen() {
|
||||
fun SettingsScreen() {
|
||||
LazyColumn(
|
||||
modifier = Modifier.padding(6.dp), verticalArrangement = Arrangement.spacedBy(6.dp)
|
||||
) {
|
||||
@@ -71,13 +71,18 @@ private fun CardAbout(version: String, modifier: Modifier = Modifier) {
|
||||
horizontalArrangement = Arrangement.SpaceEvenly, modifier = Modifier.padding(4.dp)
|
||||
) {
|
||||
CardButton(
|
||||
onClick = { gotoUrl(context, POLICY_URL) },
|
||||
text = stringResource(id = R.string.btn_privacy),
|
||||
onClick = { gotoUrl(context, GITHUB_URL) },
|
||||
text = stringResource(id = R.string.btn_github),
|
||||
modifier = Modifier.weight(1f)
|
||||
)
|
||||
CardButton(
|
||||
onClick = { gotoUrl(context, LICENSE_URL) },
|
||||
text = stringResource(id = R.string.btn_license),
|
||||
onClick = { gotoUrl(context, DONATE_URL) },
|
||||
text = stringResource(id = R.string.btn_donate),
|
||||
modifier = Modifier.weight(1f)
|
||||
)
|
||||
CardButton(
|
||||
onClick = { gotoUrl(context, FDROID_URL) },
|
||||
text = stringResource(id = R.string.btn_fdroid),
|
||||
modifier = Modifier.weight(1f)
|
||||
)
|
||||
}
|
||||
@@ -114,18 +119,13 @@ private fun CardCredits(modifier: Modifier = Modifier) {
|
||||
horizontalArrangement = Arrangement.SpaceEvenly, modifier = Modifier.padding(4.dp)
|
||||
) {
|
||||
CardButton(
|
||||
onClick = { gotoUrl(context, GITHUB_URL) },
|
||||
text = stringResource(id = R.string.btn_github),
|
||||
onClick = { gotoUrl(context, LICENSE_URL) },
|
||||
text = stringResource(id = R.string.btn_license),
|
||||
modifier = Modifier.weight(1f)
|
||||
)
|
||||
CardButton(
|
||||
onClick = { gotoUrl(context, SUPPORT_URL) },
|
||||
text = stringResource(id = R.string.btn_support),
|
||||
modifier = Modifier.weight(1f)
|
||||
)
|
||||
CardButton(
|
||||
onClick = { gotoUrl(context, FDROID_URL) },
|
||||
text = stringResource(id = R.string.btn_fdroid),
|
||||
onClick = { gotoUrl(context, POLICY_URL) },
|
||||
text = stringResource(id = R.string.btn_privacy),
|
||||
modifier = Modifier.weight(1f)
|
||||
)
|
||||
}
|
||||
Reference in new issue
Block a user