Skip to content

Instantly share code, notes, and snippets.

View renanboni's full-sized avatar

Renan Boni renanboni

  • Berlin, Germany
View GitHub Profile
@renanboni
renanboni / Event.kt
Created April 13, 2019 17:13
Event class
class Event(
val name: String,
val params: MutableMap<String, Any>? = null
)
interface EventsStreamProvider {
val eventStream: PublishSubject<Event>
}
class Analytics: EventsStreamProvider {
override var eventStream = PublishSubject.create<Event>()
fun trackEvent(e: Event) {
eventStream.onNext(e)
}
}
class FirebaseEvent(
val name: String,
val params: Bundle? = null
)
class FirebaseMapper: Mapper<Event, FirebaseEvent> {
override fun mapFrom(e: Event): FirebaseEvent {
val firebaseEvent = FirebaseEvent(e.name)
e.params?.let {
val bundle = Bundle()
for (param in it) {
bundle.putString(param.key, param.value as String)
interface Mapper<in E, out C> {
fun mapFrom(event: E): C
}
class FirebaseTracker @Inject constructor(
private val context: Context,
private val eventsStreamProvider: EventsStreamProvider,
private val mapper: FirebaseMapper
) {
private val compositeDisposable = CompositeDisposable()
init {
subscribeToEvents()
class FirstPageEvents {
companion object {
private const val FIRST_PAGE_BUTTON_A = "first_page_button_a"
private const val FIRST_PAGE_BUTTON_B = "first_page_button_b"
fun onFirstButtonClicked() = Event(FIRST_PAGE_BUTTON_A)
fun onSecondButtonClicked() = Event(FIRST_PAGE_BUTTON_B)
}
}
class FirstPageActivity : AppCompatActivity() {
@Inject
lateinit var analytics: Analytics
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
class FirstPageActivity : AppCompatActivity() {
@Inject
lateinit var analytics: Analytics
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
(applicationContext.applicationContext as App)