Skip to content

Commit

Permalink
Improve LeftKey and RightKey
Browse files Browse the repository at this point in the history
  • Loading branch information
bingzheung committed Jul 2, 2024
1 parent 36c41c5 commit af62b25
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import androidx.savedstate.SavedStateRegistryController
import androidx.savedstate.SavedStateRegistryOwner
import androidx.savedstate.setViewTreeSavedStateRegistryOwner
import org.jyutping.jyutping.extensions.keyboardLightBackground
import org.jyutping.jyutping.extensions.separator
import org.jyutping.jyutping.extensions.space
import org.jyutping.jyutping.keyboard.Candidate
import org.jyutping.jyutping.keyboard.InputMethodMode
Expand Down Expand Up @@ -167,7 +168,7 @@ class JyutpingInputMethodService: LifecycleInputMethodService(),
}
fun leftKey() {
if (isBuffering.value) {
// TODO: Separator
bufferText += String.separator
} else {
val text: String = when (inputMethodMode.value) {
InputMethodMode.Cantonese -> ""
Expand All @@ -178,7 +179,7 @@ class JyutpingInputMethodService: LifecycleInputMethodService(),
}
fun rightKey() {
if (isBuffering.value) {
// TODO: Separator
bufferText += String.separator
} else {
val text: String = when (inputMethodMode.value) {
InputMethodMode.Cantonese -> ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ fun String.convertedT2S(): String = Transliterator.getInstance("Traditional-Simp
val String.Companion.space: String
get() = " "

val String.Companion.separator: String
get() = "'"

fun String.charcode(): Int? {
if (this.length >= 10) return null
val codes = this.mapNotNull { it.intercode() }
Expand Down
48 changes: 41 additions & 7 deletions app/src/main/java/org/jyutping/jyutping/keyboard/LeftKey.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsPressedAsState
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
Expand All @@ -14,6 +16,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
Expand All @@ -22,16 +25,18 @@ import androidx.compose.ui.unit.sp
import org.jyutping.jyutping.JyutpingInputMethodService
import org.jyutping.jyutping.extensions.keyLight
import org.jyutping.jyutping.extensions.keyLightEmphatic
import org.jyutping.jyutping.extensions.separator

@Composable
fun LeftKey(modifier: Modifier) {
val interactionSource = remember { MutableInteractionSource() }
val isPressed = interactionSource.collectIsPressedAsState()
val context = LocalContext.current as JyutpingInputMethodService
val inputMethodMode = remember { context.inputMethodMode }
val keyText: String = when (inputMethodMode.value) {
InputMethodMode.Cantonese -> ""
InputMethodMode.ABC -> ","
val isBuffering = remember { context.isBuffering }
val keyForm: LeftKeyForm = when (inputMethodMode.value) {
InputMethodMode.Cantonese -> if (isBuffering.value) LeftKeyForm.Buffering else LeftKeyForm.Cantonese
InputMethodMode.ABC -> LeftKeyForm.ABC
}
Box(
modifier = modifier
Expand All @@ -49,10 +54,39 @@ fun LeftKey(modifier: Modifier) {
.fillMaxHeight(),
contentAlignment = Alignment.Center
) {
Text(
text = keyText,
fontSize = 20.sp
)
if (keyForm.isBuffering()) {
Column(
verticalArrangement = Arrangement.spacedBy(0.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = keyForm.keyText(),
fontSize = 20.sp
)
Text(
text = "分隔",
modifier =Modifier.alpha(0.85f),
fontSize = 10.sp
)
}
} else {
Text(
text = keyForm.keyText(),
fontSize = 20.sp
)
}
}
}
}

private enum class LeftKeyForm {
Cantonese,
Buffering,
ABC
}
private fun LeftKeyForm.isBuffering(): Boolean = (this == LeftKeyForm.Buffering)
private fun LeftKeyForm.keyText(): String = when (this) {
LeftKeyForm.Cantonese -> ""
LeftKeyForm.Buffering -> String.separator
LeftKeyForm.ABC -> ","
}
48 changes: 41 additions & 7 deletions app/src/main/java/org/jyutping/jyutping/keyboard/RightKey.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsPressedAsState
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
Expand All @@ -14,6 +16,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
Expand All @@ -22,16 +25,18 @@ import androidx.compose.ui.unit.sp
import org.jyutping.jyutping.JyutpingInputMethodService
import org.jyutping.jyutping.extensions.keyLight
import org.jyutping.jyutping.extensions.keyLightEmphatic
import org.jyutping.jyutping.extensions.separator

@Composable
fun RightKey(modifier: Modifier) {
val interactionSource = remember { MutableInteractionSource() }
val isPressed = interactionSource.collectIsPressedAsState()
val context = LocalContext.current as JyutpingInputMethodService
val inputMethodMode = remember { context.inputMethodMode }
val keyText: String = when (inputMethodMode.value) {
InputMethodMode.Cantonese -> ""
InputMethodMode.ABC -> "."
val isBuffering = remember { context.isBuffering }
val keyForm: RightKeyForm = when (inputMethodMode.value) {
InputMethodMode.Cantonese -> if (isBuffering.value) RightKeyForm.Buffering else RightKeyForm.Cantonese
InputMethodMode.ABC -> RightKeyForm.ABC
}
Box(
modifier = modifier
Expand All @@ -49,10 +54,39 @@ fun RightKey(modifier: Modifier) {
.fillMaxHeight(),
contentAlignment = Alignment.Center
) {
Text(
text = keyText,
fontSize = 20.sp
)
if (keyForm.isBuffering()) {
Column(
verticalArrangement = Arrangement.spacedBy(0.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = keyForm.keyText(),
fontSize = 20.sp
)
Text(
text = "分隔",
modifier =Modifier.alpha(0.85f),
fontSize = 10.sp
)
}
} else {
Text(
text = keyForm.keyText(),
fontSize = 20.sp
)
}
}
}
}

private enum class RightKeyForm {
Cantonese,
Buffering,
ABC
}
private fun RightKeyForm.isBuffering(): Boolean = (this == RightKeyForm.Buffering)
private fun RightKeyForm.keyText(): String = when (this) {
RightKeyForm.Cantonese -> ""
RightKeyForm.Buffering -> String.separator
RightKeyForm.ABC -> "."
}

0 comments on commit af62b25

Please sign in to comment.