From d0ceb0322e3cdbdf8cf1a69f14f44066eeb91c0b Mon Sep 17 00:00:00 2001 From: Paul <41385034+paulcoding810@users.noreply.github.com> Date: Thu, 5 Dec 2024 09:19:46 +0700 Subject: [PATCH] Use TextButton in dialogs (#11) * Use TextButton in dialogs * Replace check box by switch * Update version text using TextButton --- .../paulcoding/hviewer/ui/component/H7Tap.kt | 13 +-- .../ui/page/settings/InputRemoteModal.kt | 105 ++++++++++++++++++ .../hviewer/ui/page/settings/LockModal.kt | 5 +- .../hviewer/ui/page/settings/SettingsPage.kt | 93 +--------------- 4 files changed, 115 insertions(+), 101 deletions(-) create mode 100644 app/src/main/java/com/paulcoding/hviewer/ui/page/settings/InputRemoteModal.kt diff --git a/app/src/main/java/com/paulcoding/hviewer/ui/component/H7Tap.kt b/app/src/main/java/com/paulcoding/hviewer/ui/component/H7Tap.kt index 0adb2dd..ad9c2af 100644 --- a/app/src/main/java/com/paulcoding/hviewer/ui/component/H7Tap.kt +++ b/app/src/main/java/com/paulcoding/hviewer/ui/component/H7Tap.kt @@ -1,9 +1,8 @@ package com.paulcoding.hviewer.ui.component -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf @@ -19,9 +18,8 @@ import com.paulcoding.hviewer.helper.makeToast fun H7Tap(modifier: Modifier = Modifier, onDevModeChange: (Boolean) -> Unit) { var tapCount by remember { mutableIntStateOf(0) } var lastTapTime by remember { mutableLongStateOf(0L) } - Box(modifier = modifier - .padding(16.dp) - .clickable { + TextButton( + onClick = { val current = System.currentTimeMillis() if (current - lastTapTime > 2000) { tapCount = 1 @@ -34,8 +32,9 @@ fun H7Tap(modifier: Modifier = Modifier, onDevModeChange: (Boolean) -> Unit) { } } lastTapTime = current - - }) { + }, modifier = modifier + .padding(16.dp) + ) { Text("Version ${BuildConfig.VERSION_NAME}") } } \ No newline at end of file diff --git a/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/InputRemoteModal.kt b/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/InputRemoteModal.kt new file mode 100644 index 0000000..13ed616 --- /dev/null +++ b/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/InputRemoteModal.kt @@ -0,0 +1,105 @@ +package com.paulcoding.hviewer.ui.page.settings + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties + + +@Composable +fun InputRemoteModal( + initialText: String = "", + setVisible: (Boolean) -> Unit, + onSubmit: (url: String) -> Unit +) { + var text by remember { mutableStateOf(initialText) } + val focusRequester = remember { FocusRequester() } + + fun submit() { + setVisible(false) + onSubmit(text) + } + + fun dismiss() { + setVisible(false) + } + + LaunchedEffect(Unit) { + focusRequester.requestFocus() + } + + Dialog( + onDismissRequest = { dismiss() }, + properties = DialogProperties(dismissOnClickOutside = true) + ) { + Box( + modifier = Modifier + .fillMaxSize() + ) { + Column( + modifier = Modifier + .background(Color.White) + .align(Alignment.Center) + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + OutlinedTextField( + text, + onValueChange = { text = it }, + modifier = Modifier.focusRequester(focusRequester), + label = { Text("Remote Url") }, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Text, + imeAction = ImeAction.Send + ), + keyboardActions = KeyboardActions( + onSend = { submit() } + ), + placeholder = { Text("https://github.com/paulcoding810/h-viewer-scripts") } + ) + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.End + ) { + TextButton(onClick = { dismiss() }) { + Text("Cancel", color = MaterialTheme.colorScheme.error) + } + Spacer(modifier = Modifier.width(12.dp)) + TextButton(onClick = { submit() }) { + Text("OK", color = MaterialTheme.colorScheme.primary) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/LockModal.kt b/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/LockModal.kt index dc53e64..9a0ffc2 100644 --- a/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/LockModal.kt +++ b/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/LockModal.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextButton @@ -38,11 +39,11 @@ fun LockModal(onDismiss: () -> Unit, onPinConfirmed: (String) -> Unit = {}) { Spacer(modifier = Modifier.height(12.dp)) Row(modifier = Modifier.align(Alignment.End)) { TextButton(onClick = { dismiss() }) { - Text("Cancel") + Text("Cancel", color = MaterialTheme.colorScheme.error) } Spacer(modifier = Modifier.width(12.dp)) TextButton(onClick = { onPinConfirmed(pin) }) { - Text("OK") + Text("OK", color = MaterialTheme.colorScheme.primary) } } } diff --git a/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/SettingsPage.kt b/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/SettingsPage.kt index ea4e6d2..f5999d4 100644 --- a/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/SettingsPage.kt +++ b/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/SettingsPage.kt @@ -1,26 +1,16 @@ package com.paulcoding.hviewer.ui.page.settings -import androidx.compose.foundation.background -import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.text.KeyboardActions -import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.Checkbox import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold import androidx.compose.material3.Switch import androidx.compose.material3.Text @@ -34,16 +24,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusRequester -import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.text.input.ImeAction -import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties import com.paulcoding.hviewer.MainActivity import com.paulcoding.hviewer.extensions.setSecureScreen import com.paulcoding.hviewer.network.Github @@ -115,7 +98,7 @@ fun SettingsPage(appViewModel: AppViewModel, goBack: () -> Boolean, onLockEnable horizontalArrangement = Arrangement.spacedBy(8.dp) ) { Text("Enable secure screen", modifier = Modifier.weight(1f)) - Checkbox(checked = secureScreen, onCheckedChange = { + Switch(checked = secureScreen, onCheckedChange = { secureScreen = it Preferences.secureScreen = it window.setSecureScreen(it) @@ -162,78 +145,4 @@ fun SettingsPage(appViewModel: AppViewModel, goBack: () -> Boolean, onLockEnable onAppLockEnabled(it) } } -} - -@Composable -fun InputRemoteModal( - initialText: String = "", - setVisible: (Boolean) -> Unit, - onSubmit: (url: String) -> Unit -) { - var text by remember { mutableStateOf(initialText) } - val focusRequester = remember { FocusRequester() } - - fun submit() { - setVisible(false) - onSubmit(text) - } - - fun dismiss() { - setVisible(false) - } - - LaunchedEffect(Unit) { - focusRequester.requestFocus() - } - - Dialog( - onDismissRequest = { dismiss() }, - properties = DialogProperties(dismissOnClickOutside = true) - ) { - Box( - modifier = Modifier - .fillMaxSize() - ) { - Column( - modifier = Modifier - .background(Color.White) - .align(Alignment.Center) - .padding(16.dp), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - OutlinedTextField( - text, - onValueChange = { text = it }, - modifier = Modifier.focusRequester(focusRequester), - label = { Text("Remote Url") }, - keyboardOptions = KeyboardOptions( - keyboardType = KeyboardType.Text, - imeAction = ImeAction.Send - ), - keyboardActions = KeyboardActions( - onSend = { submit() } - ), - placeholder = { Text("https://github.com/paulcoding810/h-viewer-scripts") } - ) - Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.End - ) { - Text( - "Cancel", - color = MaterialTheme.colorScheme.error, - modifier = Modifier.clickable { - dismiss() - }) - Spacer(modifier = Modifier.width(16.dp)) - Text("OK", color = MaterialTheme.colorScheme.primary, - modifier = Modifier.clickable { - submit() - }) - } - } - } - } } \ No newline at end of file