Skip to content

Commit 020dff3

Browse files
authored
Note forms in compose (#6804)
1 parent e67e953 commit 020dff3

File tree

65 files changed

+1091
-929
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+1091
-929
lines changed

app/build.gradle.kts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ plugins {
4646
repositories {
4747
google()
4848
mavenCentral()
49-
// for com.github.chrisbaines:PhotoView
50-
maven { url = uri("https://www.jitpack.io") }
5149
}
5250

5351
buildkonfig {
@@ -209,7 +207,6 @@ kotlin {
209207

210208
// widgets
211209
implementation("com.google.android.flexbox:flexbox:3.0.0")
212-
implementation("com.github.chrisbanes:PhotoView:2.3.0")
213210

214211
// map and location
215212
implementation("org.maplibre.gl:android-sdk:12.3.1")

app/src/androidInstrumentedTest/kotlin/de/westnordost/streetcomplete/util/NameAndLocationLabelTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class NameAndLocationLabelTest {
3232
brandPresetsBasePath = "osmfeatures/brands"
3333
)
3434
/*
35-
TODO KMP upstream
35+
TODO Compose Multiplatform upstream
3636
Unfortunately, ResourceEnvironment's constructor is internal, so we cannot use this
3737
see https://youtrack.jetbrains.com/issue/CMP-9959/Access-resources-in-specific-language-outside-of-composition
3838
Without using specifically English resources, most tests will fail

app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/AbstractQuestForm.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ abstract class AbstractQuestForm :
136136

137137
protected open fun getHintImages(): List<DrawableResource> = questType.hintImages
138138

139+
@Composable
140+
protected open fun ContentBeforeSpeechbubbleContent() {}
141+
139142
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
140143
super.onViewCreated(view, savedInstanceState)
141144

@@ -148,6 +151,10 @@ abstract class AbstractQuestForm :
148151
)
149152
} }
150153

154+
binding.contentBeforeSpeechbubbleContent.content {
155+
ContentBeforeSpeechbubbleContent()
156+
}
157+
151158
binding.okButton.setOnClickListener {
152159
if (!isFormComplete()) {
153160
activity?.toast(R.string.no_changes)

app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/LeaveNoteInsteadFragment.kt

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
package de.westnordost.streetcomplete.quests
22

3+
import android.content.pm.PackageManager.FEATURE_CAMERA_ANY
34
import android.os.Bundle
45
import android.view.LayoutInflater
56
import android.view.View
67
import android.view.ViewGroup
8+
import androidx.compose.foundation.layout.Column
9+
import androidx.compose.material.ContentAlpha
710
import androidx.compose.material.MaterialTheme
811
import androidx.compose.material.ProvideTextStyle
912
import androidx.compose.material.Surface
1013
import androidx.compose.material.Text
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.draw.alpha
16+
import androidx.compose.ui.platform.ComposeView
1117
import androidx.core.os.bundleOf
1218
import androidx.core.view.isGone
1319
import de.westnordost.streetcomplete.ApplicationConstants
@@ -16,8 +22,8 @@ import de.westnordost.streetcomplete.data.osm.mapdata.ElementType
1622
import de.westnordost.streetcomplete.data.osm.mapdata.LatLon
1723
import de.westnordost.streetcomplete.data.osmnotes.edits.NoteEditAction
1824
import de.westnordost.streetcomplete.data.osmnotes.edits.NoteEditsController
19-
import de.westnordost.streetcomplete.databinding.FormLeaveNoteBinding
2025
import de.westnordost.streetcomplete.databinding.FragmentQuestAnswerBinding
26+
import de.westnordost.streetcomplete.quests.note_comments.NoteForm
2127
import de.westnordost.streetcomplete.resources.*
2228
import de.westnordost.streetcomplete.screens.main.bottom_sheet.AbstractCreateNoteFragment
2329
import de.westnordost.streetcomplete.ui.theme.titleLarge
@@ -27,6 +33,7 @@ import de.westnordost.streetcomplete.util.viewBinding
2733
import kotlinx.coroutines.Dispatchers
2834
import kotlinx.coroutines.launch
2935
import kotlinx.coroutines.withContext
36+
import kotlinx.io.files.FileSystem
3037
import kotlinx.serialization.decodeFromString
3138
import kotlinx.serialization.encodeToString
3239
import kotlinx.serialization.json.Json
@@ -37,6 +44,7 @@ import org.koin.android.ext.android.inject
3744
class LeaveNoteInsteadFragment : AbstractCreateNoteFragment() {
3845

3946
private val noteEditsController: NoteEditsController by inject()
47+
private val fileSystem: FileSystem by inject()
4048

4149
private var _binding: FragmentQuestAnswerBinding? = null
4250
private val binding: FragmentQuestAnswerBinding get() = _binding!!
@@ -49,10 +57,7 @@ class LeaveNoteInsteadFragment : AbstractCreateNoteFragment() {
4957
override val floatingBottomView get() = binding.okButtonContainer
5058
override val okButton get() = binding.okButton
5159
override val okButtonContainer get() = binding.okButtonContainer
52-
53-
private val contentBinding by viewBinding(FormLeaveNoteBinding::bind, R.id.content)
54-
55-
override val noteInput get() = contentBinding.noteInput
60+
private lateinit var content: ComposeView
5661

5762
interface Listener {
5863
fun onCreatedNote(position: LatLon)
@@ -75,18 +80,38 @@ class LeaveNoteInsteadFragment : AbstractCreateNoteFragment() {
7580

7681
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
7782
_binding = FragmentQuestAnswerBinding.inflate(inflater, container, false)
78-
inflater.inflate(R.layout.form_leave_note, binding.content)
83+
content = ComposeView(inflater.context)
84+
binding.content.addView(content)
7985
return binding.root
8086
}
8187

8288
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
8389
super.onViewCreated(view, savedInstanceState)
90+
91+
val addImagesEnabled = requireContext().packageManager.hasSystemFeature(FEATURE_CAMERA_ANY)
92+
8493
binding.buttonPanel.isGone = true
85-
contentBinding.descriptionLabel.isGone = true
8694
binding.questHeader.content { Surface {
87-
ProvideTextStyle(MaterialTheme.typography.titleLarge) {
88-
Text(stringResource(Res.string.map_btn_create_note))
89-
}
95+
QuestHeader(
96+
title = stringResource(Res.string.map_btn_create_note),
97+
subtitle = null,
98+
hintText = stringResource(Res.string.create_new_note_hint),
99+
hintImages = emptyList()
100+
)
101+
} }
102+
content.content { Surface {
103+
NoteForm(
104+
text = noteText.value,
105+
onTextChange = {
106+
noteText.value = it
107+
updateOkButtonEnablement()
108+
},
109+
addImagesEnabled = addImagesEnabled,
110+
onDeleteImage = ::deleteImage,
111+
onTakePhoto = { takePhoto() },
112+
fileSystem = fileSystem,
113+
imagePaths = noteImagePaths.value,
114+
)
90115
} }
91116
}
92117

app/src/androidMain/kotlin/de/westnordost/streetcomplete/quests/note_discussion/AttachPhotoFragment.kt

Lines changed: 0 additions & 149 deletions
This file was deleted.

0 commit comments

Comments
 (0)