Skip to content

Commit 97261cc

Browse files
committed
new enhanced bottom toolbar with media capture options
1 parent 2eec5dd commit 97261cc

File tree

4 files changed

+133
-0
lines changed

4 files changed

+133
-0
lines changed

app/src/main/java/com/fieldbook/tracker/traits/formats/GreenSeekerFormat.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.fieldbook.tracker.R
44
import com.fieldbook.tracker.traits.formats.parameters.AutoSwitchPlotParameter
55
import com.fieldbook.tracker.traits.formats.parameters.DefaultValueParameter
66
import com.fieldbook.tracker.traits.formats.parameters.DetailsParameter
7+
import com.fieldbook.tracker.traits.formats.parameters.MultiMediaParameter
78
import com.fieldbook.tracker.traits.formats.parameters.NameParameter
89
import com.fieldbook.tracker.traits.formats.parameters.RepeatedMeasureParameter
910
import com.fieldbook.tracker.traits.formats.parameters.ResourceFileParameter
@@ -22,4 +23,5 @@ class GreenSeekerFormat : TraitFormat(
2223
AutoSwitchPlotParameter(),
2324
RepeatedMeasureParameter(),
2425
ResourceFileParameter(),
26+
MultiMediaParameter()
2527
)

app/src/main/java/com/fieldbook/tracker/traits/formats/ScaleFormat.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.fieldbook.tracker.R
44
import com.fieldbook.tracker.traits.formats.parameters.AutoSwitchPlotParameter
55
import com.fieldbook.tracker.traits.formats.parameters.DefaultValueParameter
66
import com.fieldbook.tracker.traits.formats.parameters.DetailsParameter
7+
import com.fieldbook.tracker.traits.formats.parameters.MultiMediaParameter
78
import com.fieldbook.tracker.traits.formats.parameters.NameParameter
89
import com.fieldbook.tracker.traits.formats.parameters.RepeatedMeasureParameter
910
import com.fieldbook.tracker.traits.formats.parameters.ResourceFileParameter
@@ -22,4 +23,5 @@ class ScaleFormat : TraitFormat(
2223
AutoSwitchPlotParameter(),
2324
RepeatedMeasureParameter(),
2425
ResourceFileParameter(),
26+
MultiMediaParameter()
2527
)
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.fieldbook.tracker.traits.formats.parameters
2+
3+
import android.view.LayoutInflater
4+
import android.view.View
5+
import android.view.ViewGroup
6+
import androidx.compose.runtime.mutableStateOf
7+
import androidx.compose.ui.platform.ComposeView
8+
import com.fieldbook.tracker.R
9+
import com.fieldbook.tracker.database.repository.TraitRepository
10+
import com.fieldbook.tracker.objects.TraitObject
11+
import com.fieldbook.tracker.traits.formats.ValidationResult
12+
import com.fieldbook.tracker.traits.formats.ui.MultiMediaChoice
13+
14+
class MultiMediaParameter(private val initialDefaultValue: Boolean? = null) :
15+
BaseFormatParameter(
16+
nameStringResourceId = R.string.traits_multi_media_title,
17+
defaultLayoutId = R.layout.list_item_trait_parameter_compose_view,
18+
parameter = Parameters.MULTIMEDIA,
19+
) {
20+
21+
override fun createViewHolder(
22+
parent: ViewGroup,
23+
): BaseFormatParameter.ViewHolder {
24+
val v = LayoutInflater.from(parent.context)
25+
.inflate(R.layout.list_item_trait_parameter_compose_view, parent, false)
26+
return ViewHolder(v)
27+
}
28+
29+
inner class ViewHolder(itemView: View) : BaseFormatParameter.ViewHolder(itemView) {
30+
31+
var photoState = mutableStateOf(false)
32+
var videoState = mutableStateOf(false)
33+
var audioState = mutableStateOf(false)
34+
35+
init {
36+
37+
val composeView = itemView.findViewById<ComposeView>(R.id.compose_view)
38+
composeView?.apply {
39+
40+
try {
41+
setViewCompositionStrategy(androidx.compose.ui.platform.ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
42+
} catch (_: Exception) { }
43+
}
44+
45+
composeView.setContent {
46+
MultiMediaChoice(photoState, videoState, audioState)
47+
}
48+
}
49+
50+
override fun merge(traitObject: TraitObject) = traitObject.apply {
51+
this.multiMediaPhoto = photoState.value
52+
this.multiMediaVideo = videoState.value
53+
this.multiMediaAudio = audioState.value
54+
}
55+
56+
override fun load(traitObject: TraitObject?): Boolean {
57+
try {
58+
photoState.value = traitObject?.multiMediaPhoto == true
59+
videoState.value = traitObject?.multiMediaVideo == true
60+
audioState.value = traitObject?.multiMediaAudio == true
61+
} catch (e: Exception) {
62+
e.printStackTrace()
63+
return false
64+
}
65+
return true
66+
}
67+
68+
override fun validate(
69+
traitRepo: TraitRepository,
70+
initialTraitObject: TraitObject?
71+
) = ValidationResult()
72+
}
73+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.fieldbook.tracker.traits.formats.ui
2+
3+
import androidx.compose.foundation.layout.Arrangement
4+
import androidx.compose.foundation.layout.Box
5+
import androidx.compose.foundation.layout.Column
6+
import androidx.compose.foundation.layout.Row
7+
import androidx.compose.foundation.layout.padding
8+
import androidx.compose.foundation.layout.wrapContentSize
9+
import androidx.compose.material3.Checkbox
10+
import androidx.compose.material3.Icon
11+
import androidx.compose.runtime.Composable
12+
import androidx.compose.runtime.MutableState
13+
import androidx.compose.runtime.mutableStateOf
14+
import androidx.compose.ui.Alignment
15+
import androidx.compose.ui.Modifier
16+
import androidx.compose.ui.res.painterResource
17+
import androidx.compose.ui.tooling.preview.Preview
18+
import androidx.compose.ui.unit.dp
19+
import com.fieldbook.tracker.R
20+
21+
@Preview
22+
@Composable
23+
fun MultiMediaChoice(
24+
photoState: MutableState<Boolean> = mutableStateOf(false),
25+
videoState: MutableState<Boolean> = mutableStateOf(false),
26+
audioState: MutableState<Boolean> = mutableStateOf(false)
27+
) {
28+
Box(
29+
modifier = Modifier
30+
.wrapContentSize()
31+
.padding(16.dp)
32+
) {
33+
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
34+
MultiMediaItem(
35+
state = photoState,
36+
iconId = R.drawable.ic_trait_camera
37+
)
38+
MultiMediaItem(
39+
state = videoState,
40+
iconId = R.drawable.video
41+
)
42+
MultiMediaItem(
43+
state = audioState,
44+
iconId = R.drawable.trait_audio
45+
)
46+
}
47+
}
48+
}
49+
50+
@Composable
51+
fun MultiMediaItem(state: MutableState<Boolean>, iconId: Int) {
52+
Column(horizontalAlignment = Alignment.CenterHorizontally) {
53+
Icon(painter = painterResource(iconId), contentDescription = null)
54+
Checkbox(checked = state.value, onCheckedChange = { state.value = it })
55+
}
56+
}

0 commit comments

Comments
 (0)