Skip to content

Commit

Permalink
add "Open User Manual" and "Report Bug or Request Feature" to status …
Browse files Browse the repository at this point in the history
…bar, and also an open external link dialog (#3)
  • Loading branch information
sunny-chung committed Feb 9, 2025
1 parent a89c0b0 commit cec4f3b
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,19 @@ import androidx.compose.ui.unit.dp
import com.sunnychung.application.multiplatform.hellohttp.ux.local.LocalColor

@Composable
fun AppTextButton(modifier: Modifier = Modifier, text: String, color: Color = LocalColor.current.text, isEnabled: Boolean = true, onClick: (() -> Unit)?) {
fun AppTextButton(
modifier: Modifier = Modifier,
text: String,
isEnabled: Boolean = true,
color: Color = LocalColor.current.text,
backgroundColor: Color = if (isEnabled) LocalColor.current.backgroundButton else LocalColor.current.disabled,
onClick: (() -> Unit)?
) {
AppText(
text = text,
color = color,
modifier = modifier
.background(if (isEnabled) LocalColor.current.backgroundButton else LocalColor.current.disabled)
.background(backgroundColor)
.run {
if (isEnabled && onClick != null) {
this.clickable { onClick() }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.sunnychung.application.multiplatform.hellohttp.ux

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CornerSize
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.unit.dp
import com.sunnychung.application.multiplatform.hellohttp.AppContext
import com.sunnychung.application.multiplatform.hellohttp.ux.local.LocalColor

@Composable
fun OpenExternalLinkDialogView(url: String, onDismiss: () -> Unit) {
val colour = LocalColor.current
val clipboardManager = LocalClipboardManager.current
val localUriHandler = LocalUriHandler.current

Column(verticalArrangement = Arrangement.spacedBy(20.dp), horizontalAlignment = Alignment.CenterHorizontally) {
AppText("An external link is going to be opened.")

AppText(
text = url,
color = colour.highlight,
modifier = Modifier
.background(colour.backgroundInputField, RoundedCornerShape(corner = CornerSize(8.dp)))
.padding(6.dp)
)

Column(verticalArrangement = Arrangement.spacedBy(8.dp), horizontalAlignment = Alignment.CenterHorizontally) {
AppTextButton(text = "Copy URL") {
clipboardManager.setText(AnnotatedString(url))
AppContext.ErrorMessagePromptViewModel.showSuccessMessage("Copied text")
}
AppTextButton(text = "Open in Web Browser") {
localUriHandler.openUri(url)
onDismiss()
}
Spacer(Modifier.height(4.dp)) // 8 dp + 4 dp + 8 dp
AppTextButton(text = "Close", backgroundColor = colour.backgroundStopButton) {
onDismiss()
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.sunnychung.application.multiplatform.hellohttp.ux

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.Row
import androidx.compose.foundation.layout.fillMaxWidth
Expand All @@ -24,24 +25,46 @@ fun StatusBarView(modifier: Modifier = Modifier) {
val colors = LocalColor.current
val metadataManager = AppContext.MetadataManager

var isShowSettingDialog by remember { mutableStateOf(false) }
var showDialog by remember { mutableStateOf<DialogName?>(null) }
var openUrl by remember { mutableStateOf("") }

Box(modifier = modifier.fillMaxWidth().height(22.dp).background(colors.backgroundLight).padding(horizontal = 4.dp)) {
AppText(
text = "v${metadataManager.version} (${metadataManager.gitCommitHash})",
fontSize = 12.sp,
modifier = Modifier.align(
Alignment.CenterStart
)
modifier = Modifier.align(Alignment.CenterStart)
)

Row(modifier = Modifier.align(Alignment.CenterEnd).clickable { isShowSettingDialog = true }) {
AppImage(resource = "setting.svg", size = 16.dp, modifier = Modifier.padding(horizontal = 4.dp))
AppText(text = "Setting & Data", fontSize = 12.sp)
Row(horizontalArrangement = Arrangement.spacedBy(20.dp), modifier = Modifier.align(Alignment.CenterEnd)) {
ClickableIconAndText("question.svg", "User Manual") {
openUrl = "https://sunny-chung.github.io/hello-http/"
showDialog = DialogName.OpenExternalLink
}
ClickableIconAndText("report-issue.svg", "Bug Report or Feature Request") {
openUrl = "https://github.com/sunny-chung/hello-http/issues"
showDialog = DialogName.OpenExternalLink
}
ClickableIconAndText("setting.svg", "Setting & Data") { showDialog = DialogName.Setting }
}
}

MainWindowDialog(key = "Setting", isEnabled = isShowSettingDialog, onDismiss = { isShowSettingDialog = false }) {
SettingDialogView(closeDialog = { isShowSettingDialog = false })
MainWindowDialog(key = "Setting", isEnabled = showDialog == DialogName.Setting, onDismiss = { showDialog = null }) {
SettingDialogView(closeDialog = { showDialog = null })
}

MainWindowDialog(key = "OpenExternalLink", isEnabled = showDialog == DialogName.OpenExternalLink, onDismiss = { showDialog = null }) {
OpenExternalLinkDialogView(url = openUrl, onDismiss = { showDialog = null })
}
}

@Composable
fun ClickableIconAndText(imageResource: String, text: String, onClick: () -> Unit) {
Row(modifier = Modifier.clickable { onClick() }) {
AppImage(resource = imageResource, size = 16.dp, modifier = Modifier.padding(horizontal = 4.dp))
AppText(text = text, fontSize = 12.sp)
}
}

private enum class DialogName {
Setting, OpenExternalLink
}
15 changes: 15 additions & 0 deletions src/jvmMain/resources/image/report-issue.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit cec4f3b

Please sign in to comment.