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