Skip to content

Commit 829d507

Browse files
committed
Remove decoration box
1 parent 8595771 commit 829d507

File tree

3 files changed

+46
-59
lines changed

3 files changed

+46
-59
lines changed

app/src/main/java/jp/kaleidot725/sample/MainActivity.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,12 @@ class MainActivity : ComponentActivity() {
2424
super.onCreate(savedInstanceState)
2525
setContent {
2626
SampleTheme {
27-
var textEditorState by rememberTextEditorState(lines = DemoText.lines())
27+
val textEditorState by rememberTextEditorState(lines = DemoText.lines())
2828
TextEditor(
2929
textEditorState = textEditorState,
3030
onUpdatedState = { },
3131
modifier = Modifier.fillMaxSize()
32-
) { index, isSelected, innerTextField ->
33-
val color =if (isSelected) Color.Green else Color.White
34-
Row(modifier = Modifier.background(color)) {
35-
Text(text = index.toString().padEnd(3, '0'))
36-
Spacer(modifier = Modifier.width(4.dp))
37-
innerTextField(index = index, isSelected = isSelected, modifier = Modifier)
38-
}
39-
}
32+
)
4033
}
4134
}
4235
}

texteditor/src/main/java/jp/kaleidot725/texteditor/view/TextEditor.kt

Lines changed: 29 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -16,49 +16,43 @@ import jp.kaleidot725.texteditor.state.TextEditorState
1616
fun TextEditor(
1717
textEditorState: TextEditorState,
1818
onUpdatedState: () -> Unit,
19-
modifier: Modifier = Modifier,
20-
decorationBox: @Composable (
21-
index: Int,
22-
isSelected: Boolean, innerTextField: @Composable (index: Int, isSelected: Boolean, modifier: Modifier) -> Unit
23-
) -> Unit = { index, isSelected, innerTextField -> innerTextField(index, isSelected, Modifier) },
19+
modifier: Modifier = Modifier
2420
) {
2521
LazyColumn(modifier = modifier) {
2622
itemsIndexed(
2723
items = textEditorState.toEditable().fields,
2824
key = { _, item -> item.id }
2925
) { index, textFieldState ->
30-
decorationBox(index, textFieldState.isSelected) { index, isSelected, modifier ->
31-
val focusRequester by remember { mutableStateOf(FocusRequester()) }
26+
val focusRequester by remember { mutableStateOf(FocusRequester()) }
3227

33-
LaunchedEffect(isSelected) {
34-
if (isSelected) focusRequester.requestFocus()
35-
}
36-
37-
TextField(
38-
textFieldValue = textFieldState.value,
39-
onUpdateText = { newText ->
40-
textEditorState.toEditable()
41-
.updateField(targetIndex = index, textFieldValue = newText)
42-
onUpdatedState()
43-
},
44-
onAddNewLine = { newText ->
45-
textEditorState.toEditable()
46-
.splitField(targetIndex = index, textFieldValue = newText)
47-
onUpdatedState()
48-
},
49-
onDeleteNewLine = {
50-
textEditorState.toEditable().deleteField(targetIndex = index)
51-
onUpdatedState()
52-
},
53-
focusRequester = focusRequester,
54-
onFocus = {
55-
if (textEditorState.selectedIndices.contains(index)) return@TextField
56-
textEditorState.toEditable().selectField(targetIndex = index)
57-
onUpdatedState()
58-
},
59-
modifier = modifier
60-
)
28+
LaunchedEffect(textFieldState.isSelected) {
29+
if (textFieldState.isSelected) focusRequester.requestFocus()
6130
}
31+
32+
TextField(
33+
textFieldValue = textFieldState.value,
34+
onUpdateText = { newText ->
35+
textEditorState.toEditable()
36+
.updateField(targetIndex = index, textFieldValue = newText)
37+
onUpdatedState()
38+
},
39+
onAddNewLine = { newText ->
40+
textEditorState.toEditable()
41+
.splitField(targetIndex = index, textFieldValue = newText)
42+
onUpdatedState()
43+
},
44+
onDeleteNewLine = {
45+
textEditorState.toEditable().deleteField(targetIndex = index)
46+
onUpdatedState()
47+
},
48+
focusRequester = focusRequester,
49+
onFocus = {
50+
if (textEditorState.selectedIndices.contains(index)) return@TextField
51+
textEditorState.toEditable().selectField(targetIndex = index)
52+
onUpdatedState()
53+
},
54+
modifier = modifier
55+
)
6256
}
6357
}
6458
}

texteditor/src/test/java/jp/kaleidot725/texteditor/EditableTextEditorStateTest.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ import androidx.compose.ui.text.TextRange
44
import androidx.compose.ui.text.input.TextFieldValue
55
import io.kotest.assertions.throwables.shouldThrow
66
import io.kotest.core.spec.style.StringSpec
7-
import io.kotest.matchers.collections.shouldContainExactly
8-
import io.kotest.matchers.collections.shouldNotContain
9-
import io.kotest.matchers.collections.shouldNotContainExactly
107
import io.kotest.matchers.shouldBe
118
import jp.kaleidot725.texteditor.state.EditableTextEditorState
129
import java.security.InvalidParameterException
@@ -20,11 +17,13 @@ class EditableTextEditorStateTest : StringSpec({
2017
state.fields[0].isSelected shouldBe true
2118
}
2219
"initialize_when_text_is_not_empty" {
23-
val state = EditableTextEditorState("""
20+
val state = EditableTextEditorState(
21+
"""
2422
one
2523
two
2624
three
27-
""".trimIndent().lines())
25+
""".trimIndent().lines()
26+
)
2827

2928
state.fields.count() shouldBe 3
3029
state.fields[0].value shouldBe TextFieldValue(text = "one")
@@ -52,7 +51,7 @@ class EditableTextEditorStateTest : StringSpec({
5251

5352
state.fields.count() shouldBe 2
5453
state.fields[0].value shouldBe TextFieldValue(text = "")
55-
state.fields[0].isSelected shouldBe false
54+
state.fields[0].isSelected shouldBe false
5655
state.fields[1].value shouldBe TextFieldValue(text = "")
5756
state.fields[1].isSelected shouldBe true
5857

@@ -66,7 +65,7 @@ class EditableTextEditorStateTest : StringSpec({
6665

6766
state.fields.count() shouldBe 2
6867
state.fields[0].value shouldBe TextFieldValue(text = "aaa")
69-
state.fields[0].isSelected shouldBe false
68+
state.fields[0].isSelected shouldBe false
7069
state.fields[1].value shouldBe TextFieldValue(text = "")
7170
state.fields[1].isSelected shouldBe true
7271

@@ -80,7 +79,7 @@ class EditableTextEditorStateTest : StringSpec({
8079

8180
state.fields.count() shouldBe 2
8281
state.fields[0].value shouldBe TextFieldValue(text = "aa")
83-
state.fields[0].isSelected shouldBe false
82+
state.fields[0].isSelected shouldBe false
8483
state.fields[1].value shouldBe TextFieldValue(text = "aa")
8584
state.fields[1].isSelected shouldBe true
8685

@@ -94,11 +93,11 @@ class EditableTextEditorStateTest : StringSpec({
9493

9594
state.fields.count() shouldBe 4
9695
state.fields[0].value shouldBe TextFieldValue(text = "a")
97-
state.fields[0].isSelected shouldBe false
96+
state.fields[0].isSelected shouldBe false
9897
state.fields[1].value shouldBe TextFieldValue(text = "b")
99-
state.fields[1].isSelected shouldBe false
98+
state.fields[1].isSelected shouldBe false
10099
state.fields[2].value shouldBe TextFieldValue(text = "c")
101-
state.fields[2].isSelected shouldBe false
100+
state.fields[2].isSelected shouldBe false
102101
state.fields[3].value shouldBe TextFieldValue(text = "d")
103102
state.fields[3].isSelected shouldBe true
104103

@@ -161,6 +160,7 @@ class EditableTextEditorStateTest : StringSpec({
161160
}
162161
"delete_field_when_fields_are_not_zero" {
163162
val state = EditableTextEditorState("abc\n".lines())
163+
164164
state.selectField(1)
165165

166166
state.fields.count() shouldBe 2
@@ -176,9 +176,9 @@ class EditableTextEditorStateTest : StringSpec({
176176

177177
state.fields.count() shouldBe 1
178178
state.fields[0].value shouldBe TextFieldValue(
179-
text ="abc", selection = TextRange("abc".count())
179+
text = "abc", selection = TextRange("abc".count())
180180
)
181-
state.fields[0].isSelected shouldBe true
181+
state.fields[0].isSelected shouldBe true
182182
state.lines.count() shouldBe 1
183183
state.lines[0] shouldBe "abc"
184184
}
@@ -199,8 +199,8 @@ class EditableTextEditorStateTest : StringSpec({
199199

200200
state.fields.count() shouldBe 1
201201
state.fields[0].value shouldBe
202-
TextFieldValue(text ="abcdef", selection = TextRange("abc".count()))
203-
state.fields[0].isSelected shouldBe true
202+
TextFieldValue(text = "abcdef", selection = TextRange("abc".count()))
203+
state.fields[0].isSelected shouldBe true
204204
state.lines.count() shouldBe 1
205205
state.lines[0] shouldBe "abcdef"
206206
}

0 commit comments

Comments
 (0)