From b1aa623b2906537d075957777a51e390a9f82ebf Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sat, 19 Aug 2023 20:04:13 +0100 Subject: [PATCH] Slightly changed classes structure for readability --- .../{Components.kt => components/Common.kt} | 2 +- .../PullRefreshIndicator.kt | 2 +- .../PullRefreshModifier.kt | 2 +- .../PullRefreshState.kt | 2 +- .../presentation/dialogs/LocatorDialog.kt | 57 -------------- .../presentation/dialogs/ModesDialog.kt | 76 ------------------- .../EntriesDialog.kt} | 2 +- .../presentation/entries/EntriesScreen.kt | 19 +++-- .../presentation/entries/EntriesState.kt | 20 +++++ .../presentation/entries/EntriesUiState.kt | 20 ----- .../presentation/entries/EntriesViewModel.kt | 16 ++-- .../look4sat/presentation/info/InfoScreen.kt | 4 +- .../PassesDialog.kt} | 64 +++++++++++++++- .../presentation/passes/PassesScreen.kt | 9 +-- .../SettingsDialog.kt} | 38 +++++++++- .../presentation/settings/SettingsScreen.kt | 8 +- .../{SettingsUiState.kt => SettingsState.kt} | 0 17 files changed, 149 insertions(+), 192 deletions(-) rename app/src/main/java/com/rtbishop/look4sat/presentation/{Components.kt => components/Common.kt} (97%) rename app/src/main/java/com/rtbishop/look4sat/presentation/{pullRefresh => components}/PullRefreshIndicator.kt (99%) rename app/src/main/java/com/rtbishop/look4sat/presentation/{pullRefresh => components}/PullRefreshModifier.kt (98%) rename app/src/main/java/com/rtbishop/look4sat/presentation/{pullRefresh => components}/PullRefreshState.kt (99%) delete mode 100644 app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/LocatorDialog.kt delete mode 100644 app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/ModesDialog.kt rename app/src/main/java/com/rtbishop/look4sat/presentation/{dialogs/TypesDialog.kt => entries/EntriesDialog.kt} (98%) create mode 100644 app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesState.kt delete mode 100644 app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesUiState.kt rename app/src/main/java/com/rtbishop/look4sat/presentation/{dialogs/FilterDialog.kt => passes/PassesDialog.kt} (65%) rename app/src/main/java/com/rtbishop/look4sat/presentation/{dialogs/PositionDialog.kt => settings/SettingsDialog.kt} (66%) rename app/src/main/java/com/rtbishop/look4sat/presentation/settings/{SettingsUiState.kt => SettingsState.kt} (100%) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/Components.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/components/Common.kt similarity index 97% rename from app/src/main/java/com/rtbishop/look4sat/presentation/Components.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/components/Common.kt index b7cdef0c..ca0224db 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/Components.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/components/Common.kt @@ -1,4 +1,4 @@ -package com.rtbishop.look4sat.presentation +package com.rtbishop.look4sat.presentation.components import android.content.Context import android.content.Intent diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/pullRefresh/PullRefreshIndicator.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/components/PullRefreshIndicator.kt similarity index 99% rename from app/src/main/java/com/rtbishop/look4sat/presentation/pullRefresh/PullRefreshIndicator.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/components/PullRefreshIndicator.kt index ffeeb166..caec9a09 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/pullRefresh/PullRefreshIndicator.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/components/PullRefreshIndicator.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.rtbishop.look4sat.presentation.pullRefresh +package com.rtbishop.look4sat.presentation.components import androidx.compose.animation.Crossfade import androidx.compose.animation.core.tween diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/pullRefresh/PullRefreshModifier.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/components/PullRefreshModifier.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/presentation/pullRefresh/PullRefreshModifier.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/components/PullRefreshModifier.kt index 54139050..64410a86 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/pullRefresh/PullRefreshModifier.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/components/PullRefreshModifier.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.rtbishop.look4sat.presentation.pullRefresh +package com.rtbishop.look4sat.presentation.components import androidx.compose.animation.core.LinearOutSlowInEasing import androidx.compose.runtime.getValue diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/pullRefresh/PullRefreshState.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/components/PullRefreshState.kt similarity index 99% rename from app/src/main/java/com/rtbishop/look4sat/presentation/pullRefresh/PullRefreshState.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/components/PullRefreshState.kt index 7d6405fa..16df54da 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/pullRefresh/PullRefreshState.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/components/PullRefreshState.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.rtbishop.look4sat.presentation.pullRefresh +package com.rtbishop.look4sat.presentation.components import androidx.compose.animation.core.animate import androidx.compose.runtime.Composable diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/LocatorDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/LocatorDialog.kt deleted file mode 100644 index 5c806cf8..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/LocatorDialog.kt +++ /dev/null @@ -1,57 +0,0 @@ -package com.rtbishop.look4sat.presentation.dialogs - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.ElevatedCard -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.OutlinedTextField -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog -import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.presentation.CardButton -import com.rtbishop.look4sat.presentation.MainTheme - -@Preview(showBackground = true) -@Composable -private fun LocatorDialogPreview() { - MainTheme { LocatorDialog("IO91vl", {}) { } } -} - -@Composable -fun LocatorDialog(qthLocator: String, dismiss: () -> Unit, save: (String) -> Unit) { - val locator = rememberSaveable { mutableStateOf(qthLocator) } - val maxWidthModifier = Modifier.fillMaxWidth(1f) - Dialog(onDismissRequest = { dismiss() }) { - ElevatedCard { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(12.dp), - modifier = maxWidthModifier.padding(12.dp) - ) { - Text(text = stringResource(id = R.string.locator_title), color = MaterialTheme.colorScheme.primary) - Text(text = stringResource(id = R.string.locator_text)) - OutlinedTextField(value = locator.value, onValueChange = { locator.value = it }) - Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth()) { - CardButton(onClick = { dismiss() }, text = stringResource(id = R.string.btn_cancel)) - CardButton( - onClick = { - save(locator.value) - dismiss() - }, text = stringResource(id = R.string.btn_accept) - ) - } - } - } - } -} diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/ModesDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/ModesDialog.kt deleted file mode 100644 index 5df47346..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/ModesDialog.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.rtbishop.look4sat.presentation.dialogs - -import androidx.compose.foundation.background -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.grid.GridCells -import androidx.compose.foundation.lazy.grid.LazyVerticalGrid -import androidx.compose.foundation.lazy.grid.itemsIndexed -import androidx.compose.material3.Checkbox -import androidx.compose.material3.ElevatedCard -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Surface -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextOverflow -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog -import com.rtbishop.look4sat.presentation.MainTheme - -@Preview(showBackground = true) -@Composable -private fun ModesDialogPreview() { - val allModes = listOf( - "AFSK", "AFSK S-Net", "AFSK SALSAT", "AHRPT", "AM", "APT", "BPSK", "BPSK PMT-A3", - "CERTO", "CW", "DQPSK", "DSTAR", "DUV", "FFSK", "FM", "FMN", "FSK", "FSK AX.100 Mode 5", - "FSK AX.100 Mode 6", "FSK AX.25 G3RUH", "GFSK", "GFSK Rktr", "GMSK", "HRPT", "LoRa", - "LRPT", "LSB", "MFSK", "MSK", "MSK AX.100 Mode 5", "MSK AX.100 Mode 6", "OFDM", "OQPSK", - "PSK", "PSK31", "PSK63", "QPSK", "QPSK31", "QPSK63", "SSTV", "USB", "WSJT" - ) - MainTheme { ModesDialog(allModes, listOf("AFSK", "AFSK S-Net"), {}) {} } -} - -@Composable -fun ModesDialog(items: List, selected: List, dismiss: () -> Unit, select: (String) -> Unit) { - Dialog(onDismissRequest = { dismiss() }) { - ElevatedCard(modifier = Modifier.fillMaxHeight(0.75f)) { - LazyVerticalGrid( - columns = GridCells.Adaptive(160.dp), - modifier = Modifier.background(MaterialTheme.colorScheme.background), - horizontalArrangement = Arrangement.spacedBy(1.dp), - verticalArrangement = Arrangement.spacedBy(1.dp) - ) { - itemsIndexed(items) { index, item -> - Surface { - Row(verticalAlignment = Alignment.CenterVertically, - modifier = Modifier - .background(MaterialTheme.colorScheme.surface) - .clickable { select(item) }) { - Text( - text = "$index).", - modifier = Modifier.padding(start = 12.dp, end = 6.dp), - fontWeight = FontWeight.Normal, - color = MaterialTheme.colorScheme.secondary - ) - Text( - text = item, - modifier = Modifier.weight(1f), - fontWeight = FontWeight.Medium, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - Checkbox(checked = selected.contains(item), onCheckedChange = { select(item) }) - } - } - } - } - } - } -} diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/TypesDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesDialog.kt similarity index 98% rename from app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/TypesDialog.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesDialog.kt index c01d6bd1..416099c7 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/TypesDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesDialog.kt @@ -1,4 +1,4 @@ -package com.rtbishop.look4sat.presentation.dialogs +package com.rtbishop.look4sat.presentation.entries import androidx.compose.foundation.background import androidx.compose.foundation.clickable diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesScreen.kt index e0ebc897..49abc3ed 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesScreen.kt @@ -40,27 +40,26 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.rtbishop.look4sat.R import com.rtbishop.look4sat.domain.model.SatItem -import com.rtbishop.look4sat.presentation.CardIcon -import com.rtbishop.look4sat.presentation.CardLoadingIndicator import com.rtbishop.look4sat.presentation.MainTheme -import com.rtbishop.look4sat.presentation.dialogs.TypesDialog +import com.rtbishop.look4sat.presentation.components.CardIcon +import com.rtbishop.look4sat.presentation.components.CardLoadingIndicator @Composable -fun EntriesScreen(uiState: EntriesUiState, navToPasses: () -> Unit) { +fun EntriesScreen(uiState: EntriesState, navToPasses: () -> Unit) { val showDialog = rememberSaveable { mutableStateOf(false) } val toggleDialog = { showDialog.value = showDialog.value.not() } if (showDialog.value) { TypesDialog(items = uiState.typesList, selected = uiState.currentType, toggleDialog) { - uiState.takeAction(EntriesUiAction.SelectType(it)) + uiState.takeAction(EntriesAction.SelectType(it)) } } - val unselectAll = { uiState.takeAction(EntriesUiAction.UnselectAll) } - val selectAll = { uiState.takeAction(EntriesUiAction.SelectAll) } + val unselectAll = { uiState.takeAction(EntriesAction.UnselectAll) } + val selectAll = { uiState.takeAction(EntriesAction.SelectAll) } Column(modifier = Modifier.padding(6.dp), verticalArrangement = Arrangement.spacedBy(6.dp)) { - TopBar(setQuery = { newQuery: String -> uiState.takeAction(EntriesUiAction.SearchFor(newQuery)) }, + TopBar(setQuery = { newQuery: String -> uiState.takeAction(EntriesAction.SearchFor(newQuery)) }, saveSelection = { - uiState.takeAction(EntriesUiAction.SaveSelection) + uiState.takeAction(EntriesAction.SaveSelection) navToPasses() }) MiddleBar(uiState.currentType, { toggleDialog() }, { unselectAll() }, { selectAll() }) @@ -69,7 +68,7 @@ fun EntriesScreen(uiState: EntriesUiState, navToPasses: () -> Unit) { CardLoadingIndicator() } else { EntriesCard(uiState.itemsList) { id, isTicked -> - uiState.takeAction(EntriesUiAction.SelectSingle(id, isTicked)) + uiState.takeAction(EntriesAction.SelectSingle(id, isTicked)) } } } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesState.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesState.kt new file mode 100644 index 00000000..10cf3a1b --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesState.kt @@ -0,0 +1,20 @@ +package com.rtbishop.look4sat.presentation.entries + +import com.rtbishop.look4sat.domain.model.SatItem + +data class EntriesState( + val isLoading: Boolean, + val itemsList: List, + val currentType: String, + val typesList: List, + val takeAction: (EntriesAction) -> Unit +) + +sealed class EntriesAction { + data object SaveSelection : EntriesAction() + data class SearchFor(val query: String) : EntriesAction() + data object SelectAll : EntriesAction() + data class SelectSingle(val id: Int, val isTicked: Boolean) : EntriesAction() + data class SelectType(val type: String) : EntriesAction() + data object UnselectAll : EntriesAction() +} diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesUiState.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesUiState.kt deleted file mode 100644 index 2a59b80d..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesUiState.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.rtbishop.look4sat.presentation.entries - -import com.rtbishop.look4sat.domain.model.SatItem - -data class EntriesUiState( - val isLoading: Boolean, - val itemsList: List, - val currentType: String, - val typesList: List, - val takeAction: (EntriesUiAction) -> Unit -) - -sealed class EntriesUiAction { - data object SaveSelection : EntriesUiAction() - data class SearchFor(val query: String) : EntriesUiAction() - data object SelectAll : EntriesUiAction() - data class SelectSingle(val id: Int, val isTicked: Boolean) : EntriesUiAction() - data class SelectType(val type: String) : EntriesUiAction() - data object UnselectAll : EntriesUiAction() -} diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesViewModel.kt index d0181252..929405b9 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesViewModel.kt @@ -30,7 +30,7 @@ import kotlinx.coroutines.launch class EntriesViewModel(private val selectionRepo: ISelectionRepo) : ViewModel() { - private val defaultUiState = EntriesUiState( + private val defaultUiState = EntriesState( isLoading = true, itemsList = emptyList(), currentType = selectionRepo.getCurrentType(), @@ -48,14 +48,14 @@ class EntriesViewModel(private val selectionRepo: ISelectionRepo) : ViewModel() } } - private fun handleAction(action: EntriesUiAction) { + private fun handleAction(action: EntriesAction) { when (action) { - EntriesUiAction.SaveSelection -> saveSelection() - is EntriesUiAction.SearchFor -> searchFor(action.query) - EntriesUiAction.SelectAll -> selectAll(true) - is EntriesUiAction.SelectSingle -> selectSingle(action.id, action.isTicked) - is EntriesUiAction.SelectType -> selectType(action.type) - EntriesUiAction.UnselectAll -> selectAll(false) + EntriesAction.SaveSelection -> saveSelection() + is EntriesAction.SearchFor -> searchFor(action.query) + EntriesAction.SelectAll -> selectAll(true) + is EntriesAction.SelectSingle -> selectSingle(action.id, action.isTicked) + is EntriesAction.SelectType -> selectType(action.type) + EntriesAction.UnselectAll -> selectAll(false) } } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/info/InfoScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/info/InfoScreen.kt index 9aefdf9f..7c6752f6 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/info/InfoScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/info/InfoScreen.kt @@ -22,9 +22,9 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.presentation.CardButton import com.rtbishop.look4sat.presentation.MainTheme -import com.rtbishop.look4sat.presentation.gotoUrl +import com.rtbishop.look4sat.presentation.components.CardButton +import com.rtbishop.look4sat.presentation.components.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" diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/FilterDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesDialog.kt similarity index 65% rename from app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/FilterDialog.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesDialog.kt index 2f01864f..6c3a9d46 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/FilterDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesDialog.kt @@ -15,19 +15,27 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.rtbishop.look4sat.presentation.dialogs +package com.rtbishop.look4sat.presentation.passes +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.lazy.grid.itemsIndexed +import androidx.compose.material3.Checkbox import androidx.compose.material3.ElevatedCard import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Slider import androidx.compose.material3.SliderDefaults +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableIntStateOf @@ -37,13 +45,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.Dialog import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.presentation.CardButton import com.rtbishop.look4sat.presentation.MainTheme +import com.rtbishop.look4sat.presentation.components.CardButton @Preview(showBackground = true) @Composable @@ -123,3 +132,54 @@ fun FilterDialog(hours: Int, elevation: Double, dismiss: () -> Unit, save: (Int, } } } + +@Preview(showBackground = true) +@Composable +private fun ModesDialogPreview() { + val allModes = listOf( + "AFSK", "AFSK S-Net", "AFSK SALSAT", "AHRPT", "AM", "APT", "BPSK", "BPSK PMT-A3", + "CERTO", "CW", "DQPSK", "DSTAR", "DUV", "FFSK", "FM", "FMN", "FSK", "FSK AX.100 Mode 5", + "FSK AX.100 Mode 6", "FSK AX.25 G3RUH", "GFSK", "GFSK Rktr", "GMSK", "HRPT", "LoRa", + "LRPT", "LSB", "MFSK", "MSK", "MSK AX.100 Mode 5", "MSK AX.100 Mode 6", "OFDM", "OQPSK", + "PSK", "PSK31", "PSK63", "QPSK", "QPSK31", "QPSK63", "SSTV", "USB", "WSJT" + ) + MainTheme { ModesDialog(allModes, listOf("AFSK", "AFSK S-Net"), {}) {} } +} + +@Composable +fun ModesDialog(items: List, selected: List, dismiss: () -> Unit, select: (String) -> Unit) { + Dialog(onDismissRequest = { dismiss() }) { + ElevatedCard(modifier = Modifier.fillMaxHeight(0.75f)) { + LazyVerticalGrid( + columns = GridCells.Adaptive(160.dp), + modifier = Modifier.background(MaterialTheme.colorScheme.background), + horizontalArrangement = Arrangement.spacedBy(1.dp), + verticalArrangement = Arrangement.spacedBy(1.dp) + ) { + itemsIndexed(items) { index, item -> + Surface { + Row(verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .background(MaterialTheme.colorScheme.surface) + .clickable { select(item) }) { + Text( + text = "$index).", + modifier = Modifier.padding(start = 12.dp, end = 6.dp), + fontWeight = FontWeight.Normal, + color = MaterialTheme.colorScheme.secondary + ) + Text( + text = item, + modifier = Modifier.weight(1f), + fontWeight = FontWeight.Medium, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + Checkbox(checked = selected.contains(item), onCheckedChange = { select(item) }) + } + } + } + } + } + } +} diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesScreen.kt index afdb57ad..84f5c2ca 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesScreen.kt @@ -43,11 +43,10 @@ import com.rtbishop.look4sat.domain.predict.NearEarthSatellite import com.rtbishop.look4sat.domain.predict.OrbitalData import com.rtbishop.look4sat.domain.predict.SatPass import com.rtbishop.look4sat.presentation.MainTheme -import com.rtbishop.look4sat.presentation.dialogs.FilterDialog -import com.rtbishop.look4sat.presentation.pullRefresh.PullRefreshIndicator -import com.rtbishop.look4sat.presentation.pullRefresh.PullRefreshState -import com.rtbishop.look4sat.presentation.pullRefresh.pullRefresh -import com.rtbishop.look4sat.presentation.pullRefresh.rememberPullRefreshState +import com.rtbishop.look4sat.presentation.components.PullRefreshIndicator +import com.rtbishop.look4sat.presentation.components.PullRefreshState +import com.rtbishop.look4sat.presentation.components.pullRefresh +import com.rtbishop.look4sat.presentation.components.rememberPullRefreshState import java.text.SimpleDateFormat import java.util.* diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/PositionDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsDialog.kt similarity index 66% rename from app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/PositionDialog.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsDialog.kt index c0bc45e0..c1064f9e 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/dialogs/PositionDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsDialog.kt @@ -1,4 +1,4 @@ -package com.rtbishop.look4sat.presentation.dialogs +package com.rtbishop.look4sat.presentation.settings import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -19,8 +19,8 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.presentation.CardButton import com.rtbishop.look4sat.presentation.MainTheme +import com.rtbishop.look4sat.presentation.components.CardButton @Preview(showBackground = true) @Composable @@ -67,3 +67,37 @@ private fun saveValues(latValue: String, lonValue: String, dismiss: () -> Unit, save(newLatitude, newLongitude) dismiss() } + +@Preview(showBackground = true) +@Composable +private fun LocatorDialogPreview() { + MainTheme { LocatorDialog("IO91vl", {}) { } } +} + +@Composable +fun LocatorDialog(qthLocator: String, dismiss: () -> Unit, save: (String) -> Unit) { + val locator = rememberSaveable { mutableStateOf(qthLocator) } + val maxWidthModifier = Modifier.fillMaxWidth(1f) + Dialog(onDismissRequest = { dismiss() }) { + ElevatedCard { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(12.dp), + modifier = maxWidthModifier.padding(12.dp) + ) { + Text(text = stringResource(id = R.string.locator_title), color = MaterialTheme.colorScheme.primary) + Text(text = stringResource(id = R.string.locator_text)) + OutlinedTextField(value = locator.value, onValueChange = { locator.value = it }) + Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth()) { + CardButton(onClick = { dismiss() }, text = stringResource(id = R.string.btn_cancel)) + CardButton( + onClick = { + save(locator.value) + dismiss() + }, text = stringResource(id = R.string.btn_accept) + ) + } + } + } + } +} diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsScreen.kt index 0faefe38..eb97e8b7 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsScreen.kt @@ -37,12 +37,10 @@ import com.rtbishop.look4sat.BuildConfig import com.rtbishop.look4sat.R import com.rtbishop.look4sat.domain.model.OtherSettings import com.rtbishop.look4sat.domain.predict.GeoPos -import com.rtbishop.look4sat.presentation.CardButton import com.rtbishop.look4sat.presentation.MainTheme -import com.rtbishop.look4sat.presentation.dialogs.LocatorDialog -import com.rtbishop.look4sat.presentation.dialogs.PositionDialog -import com.rtbishop.look4sat.presentation.gotoUrl -import com.rtbishop.look4sat.presentation.showToast +import com.rtbishop.look4sat.presentation.components.CardButton +import com.rtbishop.look4sat.presentation.components.gotoUrl +import com.rtbishop.look4sat.presentation.components.showToast import java.text.SimpleDateFormat import java.util.Date import java.util.Locale diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsUiState.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsState.kt similarity index 100% rename from app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsUiState.kt rename to app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsState.kt