Skip to content

Instantly share code, notes, and snippets.

@arjit-meesho
arjit-meesho / PatternTransformer.kt
Created September 7, 2021 07:49
Pattern Transformer
package com.meesho.meshlytics.transformer
import java.util.regex.Pattern
/**
* @param patternMaps a list of [PatternMap] where each [PatternMap.patternToFind] is replaced
* via [PatternMap.replaceWith]
*/
class PatternTransformer(private val patternMaps: List<PatternMap>) : KeyTransformer {
@arjit-meesho
arjit-meesho / LowerCaseTransformer.kt
Created September 7, 2021 07:48
Lower Case Transformer
package com.meesho.meshlytics.transformer
/**
* Converts the key to lower case.
*/
class LowerCaseTransformer : KeyTransformer {
override fun transformKey(inputKey: String) = inputKey.toLowerCase()
}
@arjit-meesho
arjit-meesho / KeyTransformer.kt
Created September 7, 2021 07:47
KeyTransformer
package com.meesho.meshlytics.transformer
/**
* Abstract implementation of transforming input keys of events as required.
*/
interface KeyTransformer {
/**
* @param inputKey key to be transformed like event name or property key
* Returns a string after applying transformation on [inputKey]
@arjit-meesho
arjit-meesho / DispatcherResolverImpl.kt
Created September 7, 2021 07:46
Concrete Implementation of DispatcherResolver
package com.meesho.meshlyticssample.analytics
import com.meesho.meshlytics.DispatcherResolver
import com.meesho.meshlyticssample.analytics.dispatchers.DispatcherIds
import javax.inject.Inject
import kotlin.experimental.or
class DispatcherResolverImpl @Inject internal constructor() : DispatcherResolver {
private val eventDispatcherMap: Map<String, Byte> = mapOf(
@arjit-meesho
arjit-meesho / MixpanelDispatcher.kt
Created September 7, 2021 07:46
Concrete Implementation of Dispatcher
package com.meesho.meshlyticssample.analytics.dispatchers
import com.meesho.meshlytics.Dispatcher
import com.meesho.meshlytics.data.AnalyticsEvent
import com.meesho.meshlytics.data.Gender
import com.meesho.meshlytics.transformer.EmptyKeyTransformer
import com.meesho.meshlytics.transformer.ReservedKeyTransformer
import com.meesho.meshlyticssample.analytics.AnalyticConstants
import com.meesho.meshlyticssample.analytics.AnalyticsDataStore
import com.meesho.meshlyticssample.analytics.AnalyticsLogger
@arjit-meesho
arjit-meesho / AnalyticsManager.kt
Created September 7, 2021 07:44
Single Meshlytics Interface for Application
package com.meesho.meshlytics
import com.meesho.meshlytics.data.AnalyticsEvent
import com.meesho.meshlytics.data.Gender
import com.meesho.meshlytics.data.ProfileEvent
import com.meesho.meshlytics.data.SuperEvent
import com.meesho.meshlytics.validation.KeyValidationResult
import com.meesho.meshlytics.validation.KeyValidator
import java.lang.RuntimeException
import kotlin.experimental.xor
@arjit-meesho
arjit-meesho / Analytics.kt
Created September 7, 2021 07:43
Common API For Meshlytics
package com.meesho.meshlytics
import com.meesho.meshlytics.data.AnalyticsEvent
import com.meesho.meshlytics.data.Gender
import com.meesho.meshlytics.data.ProfileEvent
/**
* This interface contains core contract required for analytics.
* This contains methods common to [AnalyticsManager] and [Dispatcher]
* @see AnalyticsManager
@arjit-meesho
arjit-meesho / CustomRecyclerView.kt
Created June 20, 2021 09:27
Custom Recycler View with Slower Speed
class CustomRecyclerView @JvmOverloads constructor(
context: Context, attributeSet: AttributeSet? = null
) : RecyclerView(context, attributeSet) {
companion object {
private const val FLING_SPEED_FACTOR = 0.8f
}
override fun fling(velocityX: Int, velocityY: Int): Boolean {
val slowVelocityY = (velocityY * FLING_SPEED_FACTOR).toInt() // keep it less than 1.0 to slowdown
package demo;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.*;
class Analytics {
private ExecutorService enqueueExecutor = Executors.newSingleThreadExecutor();