diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index e05c626b3..7629699a3 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -47,15 +47,31 @@ private class EventWrapper>( private val recorder: ((Map?) -> Unit), private val keyMapper: ((String) -> T)? = null ) { - private val String.asCamelCase: String - get() = this.split("_").reduceIndexed { index, acc, s -> - if (index == 0) acc + s - else acc + s.capitalize() + + /** + * Converts snake_case string to camelCase. + */ + private fun String.asCamelCase(): String { + val parts = split("_") + val builder = StringBuilder() + + for ((index, part) in parts.withIndex()) { + if (index == 0) { + builder.append(part) + } else { + builder.append(part[0].toUpperCase()) + builder.append(part.substring(1)) + } } + return builder.toString() + } + fun track(event: Event) { val extras = if (keyMapper != null) { - event.extras?.mapKeys { keyMapper.invoke(it.key.toString().asCamelCase) } + event.extras?.mapKeys { (key) -> + keyMapper.invoke(key.toString().asCamelCase()) + } } else { null } diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt index d5cf0f200..d1d474de3 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt @@ -297,7 +297,7 @@ sealed class Event { } override val extras: Map? - get() = mapOf(Events.browserMenuActionKeys.item to item.toString().toLowerCase()) + get() = mapOf(Events.browserMenuActionKeys.item to item.toString().toLowerCase(Locale.ROOT)) } sealed class Search