From 68d35f01042af690ee50c1e5ea1f0b3559b269f6 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Wed, 1 Mar 2023 18:16:00 +0000 Subject: [PATCH] Converted LocatorDialog and PositionDialog --- .../settingsScreen/LocatorDialog.kt | 107 +++++++------- .../settingsScreen/PositionDialog.kt | 128 +++++++++-------- app/src/main/res/layout/dialog_locator.xml | 94 ------------- app/src/main/res/layout/dialog_position.xml | 133 ------------------ 4 files changed, 125 insertions(+), 337 deletions(-) delete mode 100644 app/src/main/res/layout/dialog_locator.xml delete mode 100644 app/src/main/res/layout/dialog_position.xml diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/LocatorDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/LocatorDialog.kt index 1f8cd427..83a0d76f 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/LocatorDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/LocatorDialog.kt @@ -1,58 +1,67 @@ -/* - * Look4Sat. Amateur radio satellite tracker and pass predictor. - * Copyright (C) 2019-2022 Arty Bishop (bishop.arty@gmail.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ package com.rtbishop.look4sat.presentation.settingsScreen -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.WindowManager -import androidx.appcompat.app.AppCompatDialogFragment +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.material3.* +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.window.Dialog import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.databinding.DialogLocatorBinding -import com.rtbishop.look4sat.domain.ISettingsManager -import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject +import com.rtbishop.look4sat.presentation.CardButton +import com.rtbishop.look4sat.presentation.MainTheme -@AndroidEntryPoint -class LocatorDialog : AppCompatDialogFragment() { +@Preview(showBackground = true) +@Composable +private fun LocatorDialogPreview() { + MainTheme { LocatorDialog(8, 16.0, {}) { _, _ -> } } +} - @Inject - lateinit var preferences: ISettingsManager - - override fun onCreateView(inflater: LayoutInflater, group: ViewGroup?, state: Bundle?): View? { - return inflater.inflate(R.layout.dialog_locator, group, false) - } - - override fun onViewCreated(view: View, state: Bundle?) { - super.onViewCreated(view, state) - DialogLocatorBinding.bind(view).run { - dialog?.window?.setBackgroundDrawableResource(R.color.transparent) - dialog?.window?.setLayout( - (resources.displayMetrics.widthPixels * 0.94).toInt(), - WindowManager.LayoutParams.WRAP_CONTENT - ) - locatorEdit.setText(preferences.loadStationLocator()) - locatorBtnPos.setOnClickListener { -// setNavResult("locator", locatorEdit.text.toString()) - dismiss() +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun LocatorDialog( + hours: Int, elevation: Double, toggle: () -> Unit, save: (Int, Double) -> Unit +) { + val hoursValue = rememberSaveable { mutableStateOf(hours) } + val elevValue = rememberSaveable { mutableStateOf(elevation) } + Dialog(onDismissRequest = { toggle() }) { + ElevatedCard { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxWidth(1f) + ) { + Text( + text = stringResource(id = R.string.locator_title), + color = MaterialTheme.colorScheme.primary + ) + Text(text = stringResource(id = R.string.locator_text)) + OutlinedTextField(value = hoursValue.value.toString(), onValueChange = { newValue -> + val hoursAhead = try { + newValue.toInt() + } catch (exception: Exception) { + 12 + } + hoursValue.value = hoursAhead + }) + Row( + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier.fillMaxWidth() + ) { + CardButton(onClick = { toggle() }, text = "Cancel") + CardButton( + onClick = { + save(hoursValue.value, elevValue.value) + toggle() + }, text = "Accept" + ) + } } - locatorBtnNeg.setOnClickListener { dismiss() } } } } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/PositionDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/PositionDialog.kt index 4833034a..6d109aa1 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/PositionDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settingsScreen/PositionDialog.kt @@ -1,70 +1,76 @@ -/* - * Look4Sat. Amateur radio satellite tracker and pass predictor. - * Copyright (C) 2019-2022 Arty Bishop (bishop.arty@gmail.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ package com.rtbishop.look4sat.presentation.settingsScreen -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.WindowManager -import androidx.appcompat.app.AppCompatDialogFragment +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.material3.* +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.window.Dialog import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.databinding.DialogPositionBinding -import com.rtbishop.look4sat.domain.ISettingsManager -import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject +import com.rtbishop.look4sat.presentation.CardButton +import com.rtbishop.look4sat.presentation.MainTheme -@AndroidEntryPoint -class PositionDialog : AppCompatDialogFragment() { +@Preview(showBackground = true) +@Composable +private fun PositionDialogPreview() { + MainTheme { PositionDialog(8, 16.0, {}) { _, _ -> } } +} - @Inject - lateinit var preferences: ISettingsManager - - override fun onCreateView(inflater: LayoutInflater, group: ViewGroup?, state: Bundle?): View? { - return inflater.inflate(R.layout.dialog_position, group, false) - } - - override fun onViewCreated(view: View, state: Bundle?) { - super.onViewCreated(view, state) - DialogPositionBinding.bind(view).run { - dialog?.window?.setBackgroundDrawableResource(R.color.transparent) - dialog?.window?.setLayout( - (resources.displayMetrics.widthPixels * 0.94).toInt(), - WindowManager.LayoutParams.WRAP_CONTENT - ) - val location = preferences.loadStationPosition() - positionLatEdit.setText(location.lat.toString()) - positionLonEdit.setText(location.lon.toString()) - positionBtnPos.setOnClickListener { -// val latitude = try { -// positionLatEdit.text.toString().toDouble() -// } catch (exception: Exception) { -// 180.0 -// } -// val longitude = try { -// positionLonEdit.text.toString().toDouble() -// } catch (exception: Exception) { -// 400.0 -// } -// setNavResult("position", Pair(latitude, longitude)) - dismiss() +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun PositionDialog( + hours: Int, elevation: Double, toggle: () -> Unit, save: (Int, Double) -> Unit +) { + val hoursValue = rememberSaveable { mutableStateOf(hours) } + val elevValue = rememberSaveable { mutableStateOf(elevation) } + Dialog(onDismissRequest = { toggle() }) { + ElevatedCard { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxWidth(1f) + ) { + Text( + text = stringResource(id = R.string.position_title), + color = MaterialTheme.colorScheme.primary + ) + Text(text = stringResource(id = R.string.position_lat_text)) + OutlinedTextField(value = hoursValue.value.toString(), onValueChange = { newValue -> + val hoursAhead = try { + newValue.toInt() + } catch (exception: Exception) { + 12 + } + hoursValue.value = hoursAhead + }) + Text(text = stringResource(id = R.string.position_lon_text)) + OutlinedTextField(value = elevValue.value.toString(), onValueChange = { newValue -> + val maxElevation = try { + newValue.toDouble() + } catch (exception: Exception) { + 16.0 + } + elevValue.value = maxElevation + }) + Row( + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier.fillMaxWidth() + ) { + CardButton(onClick = { toggle() }, text = "Cancel") + CardButton( + onClick = { + save(hoursValue.value, elevValue.value) + toggle() + }, text = "Accept" + ) + } } - positionBtnNeg.setOnClickListener { dismiss() } } } } diff --git a/app/src/main/res/layout/dialog_locator.xml b/app/src/main/res/layout/dialog_locator.xml deleted file mode 100644 index aa4230d4..00000000 --- a/app/src/main/res/layout/dialog_locator.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - -