minor form check/hints
This commit is contained in:
parent
d19fd84244
commit
482f664f7e
@ -1,8 +1,10 @@
|
|||||||
package net.blumia.pcmdroid.ui.screen.addserver
|
package net.blumia.pcmdroid.ui.screen.addserver
|
||||||
|
|
||||||
|
import android.webkit.URLUtil
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
|
import androidx.compose.foundation.text.KeyboardActions
|
||||||
import androidx.compose.foundation.text.KeyboardOptions
|
import androidx.compose.foundation.text.KeyboardOptions
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.*
|
import androidx.compose.material.*
|
||||||
@ -14,8 +16,11 @@ import androidx.compose.runtime.*
|
|||||||
import androidx.compose.runtime.livedata.observeAsState
|
import androidx.compose.runtime.livedata.observeAsState
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||||
|
import androidx.compose.ui.text.input.ImeAction
|
||||||
import androidx.compose.ui.text.input.KeyboardType
|
import androidx.compose.ui.text.input.KeyboardType
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
@ -23,6 +28,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import net.blumia.pcmdroid.model.Server
|
import net.blumia.pcmdroid.model.Server
|
||||||
import net.blumia.pcmdroid.viewmodel.AddServerViewModel
|
import net.blumia.pcmdroid.viewmodel.AddServerViewModel
|
||||||
|
|
||||||
|
@OptIn(ExperimentalComposeUiApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun StepEnterApiUrl(
|
fun StepEnterApiUrl(
|
||||||
viewModel: AddServerViewModel = AddServerViewModel(),
|
viewModel: AddServerViewModel = AddServerViewModel(),
|
||||||
@ -55,16 +61,25 @@ fun StepEnterApiUrl(
|
|||||||
|
|
||||||
val urlStr: String by viewModel.apiUrl.observeAsState("")
|
val urlStr: String by viewModel.apiUrl.observeAsState("")
|
||||||
|
|
||||||
|
val keyboardController = LocalSoftwareKeyboardController.current
|
||||||
|
|
||||||
OutlinedTextField(
|
OutlinedTextField(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = 10.dp),
|
.padding(vertical = 10.dp),
|
||||||
keyboardOptions = KeyboardOptions(
|
keyboardOptions = KeyboardOptions(
|
||||||
keyboardType = KeyboardType.Uri,
|
keyboardType = KeyboardType.Uri,
|
||||||
|
imeAction = ImeAction.Done,
|
||||||
|
),
|
||||||
|
keyboardActions = KeyboardActions(
|
||||||
|
onDone = {
|
||||||
|
keyboardController?.hide()
|
||||||
|
}
|
||||||
),
|
),
|
||||||
singleLine = true,
|
singleLine = true,
|
||||||
value = urlStr,
|
value = urlStr,
|
||||||
onValueChange = viewModel::setApiUrl,
|
onValueChange = viewModel::setApiUrl,
|
||||||
|
isError = !viewModel.isApiUrlValid() && urlStr.isNotEmpty(),
|
||||||
label = { Text("Server API Url") },
|
label = { Text("Server API Url") },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -91,6 +106,7 @@ fun StepOtherDetail(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = 10.dp),
|
.padding(vertical = 10.dp),
|
||||||
|
singleLine = true,
|
||||||
value = shortNameStr,
|
value = shortNameStr,
|
||||||
onValueChange = viewModel::setShortNameStr,
|
onValueChange = viewModel::setShortNameStr,
|
||||||
label = { Text("Server short name") },
|
label = { Text("Server short name") },
|
||||||
@ -100,6 +116,7 @@ fun StepOtherDetail(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = 10.dp),
|
.padding(vertical = 10.dp),
|
||||||
|
singleLine = true,
|
||||||
value = nameStr,
|
value = nameStr,
|
||||||
onValueChange = viewModel::setNameStr,
|
onValueChange = viewModel::setNameStr,
|
||||||
label = { Text("Server name") },
|
label = { Text("Server name") },
|
||||||
@ -109,6 +126,7 @@ fun StepOtherDetail(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = 10.dp),
|
.padding(vertical = 10.dp),
|
||||||
|
singleLine = true,
|
||||||
value = baseFolderNameStr,
|
value = baseFolderNameStr,
|
||||||
onValueChange = viewModel::setBaseFolderNameStr,
|
onValueChange = viewModel::setBaseFolderNameStr,
|
||||||
label = { Text("Base folder name") },
|
label = { Text("Base folder name") },
|
||||||
@ -118,6 +136,11 @@ fun StepOtherDetail(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = 10.dp),
|
.padding(vertical = 10.dp),
|
||||||
|
keyboardOptions = KeyboardOptions(
|
||||||
|
keyboardType = KeyboardType.Uri,
|
||||||
|
imeAction = ImeAction.Next,
|
||||||
|
),
|
||||||
|
singleLine = true,
|
||||||
value = mediaBaseUrlStr,
|
value = mediaBaseUrlStr,
|
||||||
onValueChange = viewModel::setMediaBaseUrlStr,
|
onValueChange = viewModel::setMediaBaseUrlStr,
|
||||||
label = { Text("Media base url") },
|
label = { Text("Media base url") },
|
||||||
@ -208,7 +231,9 @@ fun AddServerScreen(
|
|||||||
) {
|
) {
|
||||||
Text("Back")
|
Text("Back")
|
||||||
}
|
}
|
||||||
|
val apiUrl by viewModel.apiUrl.observeAsState()
|
||||||
Button(
|
Button(
|
||||||
|
enabled = URLUtil.isNetworkUrl(apiUrl),
|
||||||
onClick = {
|
onClick = {
|
||||||
if (stepState != finalStep) {
|
if (stepState != finalStep) {
|
||||||
viewModel.fetchContentFromApiUrl()
|
viewModel.fetchContentFromApiUrl()
|
||||||
|
@ -84,6 +84,7 @@ fun EditServerScreen(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = 10.dp),
|
.padding(vertical = 10.dp),
|
||||||
|
singleLine = true,
|
||||||
value = shortNameStr,
|
value = shortNameStr,
|
||||||
onValueChange = { value -> shortNameStr = value},
|
onValueChange = { value -> shortNameStr = value},
|
||||||
label = { Text("Server Short Name") },
|
label = { Text("Server Short Name") },
|
||||||
@ -93,6 +94,7 @@ fun EditServerScreen(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = 10.dp),
|
.padding(vertical = 10.dp),
|
||||||
|
singleLine = true,
|
||||||
value = nameStr,
|
value = nameStr,
|
||||||
onValueChange = { value -> nameStr = value},
|
onValueChange = { value -> nameStr = value},
|
||||||
label = { Text("Server Name") },
|
label = { Text("Server Name") },
|
||||||
@ -105,6 +107,7 @@ fun EditServerScreen(
|
|||||||
keyboardOptions = KeyboardOptions(
|
keyboardOptions = KeyboardOptions(
|
||||||
keyboardType = KeyboardType.Uri,
|
keyboardType = KeyboardType.Uri,
|
||||||
),
|
),
|
||||||
|
singleLine = true,
|
||||||
value = urlStr,
|
value = urlStr,
|
||||||
onValueChange = { value -> urlStr = value},
|
onValueChange = { value -> urlStr = value},
|
||||||
label = { Text("Server API Url") },
|
label = { Text("Server API Url") },
|
||||||
@ -114,6 +117,7 @@ fun EditServerScreen(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = 10.dp),
|
.padding(vertical = 10.dp),
|
||||||
|
singleLine = true,
|
||||||
value = baseFolderNameStr,
|
value = baseFolderNameStr,
|
||||||
onValueChange = { value -> baseFolderNameStr = value},
|
onValueChange = { value -> baseFolderNameStr = value},
|
||||||
label = { Text("Base folder name") },
|
label = { Text("Base folder name") },
|
||||||
@ -123,6 +127,10 @@ fun EditServerScreen(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = 10.dp),
|
.padding(vertical = 10.dp),
|
||||||
|
keyboardOptions = KeyboardOptions(
|
||||||
|
keyboardType = KeyboardType.Uri,
|
||||||
|
),
|
||||||
|
singleLine = true,
|
||||||
value = mediaBaseUrlStr,
|
value = mediaBaseUrlStr,
|
||||||
onValueChange = { value -> mediaBaseUrlStr = value},
|
onValueChange = { value -> mediaBaseUrlStr = value},
|
||||||
label = { Text("Media base url") },
|
label = { Text("Media base url") },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user