Which one? 1. ```class SnackbarUtils { compa...
# codereview
t
Which one? 1.
Copy code
class SnackbarUtils {
    companion object {
        fun makeSnackbar() {

        }
    }
}
2.
Copy code
class SnackbarUtils {
    fun makeSnackbar() {

    }
    companion object {
        val instance get() = SnackbarUtils()
    }
}
3.
Copy code
class SnackbarUtils {
    fun makeSnackbar() {

    }
    companion object {
        val instance = SnackbarUtils()
    }
}
3️⃣ 1
j
no one for me
3
t
What would you use then?
j
fun Activity.makeSnackbar(...)
or something so, no class, no object
t
Yeah but that can clutter activity code 😕
My current activity has 250 lines
j
it is a extension function
t
Oh true...
Make sense
j
you can put it wherever you want
t
Isn't MVVM a better choice than just extension functions?
j
i.e. SnackbarExtensions.kt
this is not related to the architecture
t
Hm ok
j
just UI showing UI
t
So I shouldn't make a new class for it? Is it bad if I do?
Is it valid, or?
j
it is not wrong but I dont see any advantage of doing that instead of using an extension func
t
Ok
j
well
if it is an extension function
you can only use it in the right places
if it is a class
you can use wherever you want
t
If I want to use a certain snackbar style app wide isn't it bad if it's confined to a certain activity?
j
don't have a lot of sense instantiating a class about snackbars in the viewmodel for example
t
Cause I'm using the snackbar in multiple activities
j
extension function of a generic activity, not specific one
or a Fragment.
t
Oh nice! Never knew you could do taht
that*
j
so you can use it in all activities or fragments
t
Gotcha... I will work on it
hey I have a question
It's saying that 'Activity.' is redundant
j
code
t
So instead of:
Copy code
package com.realtomjoney.pyxlmoose

import android.app.Activity
import android.graphics.Color
import android.view.View
import com.google.android.material.snackbar.Snackbar

const val snackbarBackgroundTint: String = "#eaddff"

fun Activity.showSnackbar(contextView: View, snackbarText: String, duration: Int) {
    Snackbar.make(contextView, snackbarText, duration)
            .setTextColor(Color.BLACK)
            .setBackgroundTint(Color.parseColor(snackbarBackgroundTint))
            .show()
}
it wants:
Copy code
package com.realtomjoney.pyxlmoose

import android.app.Activity
import android.graphics.Color
import android.view.View
import com.google.android.material.snackbar.Snackbar

const val snackbarBackgroundTint: String = "#eaddff"

fun showSnackbar(contextView: View, snackbarText: String, duration: Int) {
    Snackbar.make(contextView, snackbarText, duration)
            .setTextColor(Color.BLACK)
            .setBackgroundTint(Color.parseColor(snackbarBackgroundTint))
            .show()
}
j
you are not passing the activity there
t
Oh can you teach me how to do it bro
j
Copy code
fun View.showSnackbar(snackbarText: String, duration: Int) {
    Snackbar.make(this, snackbarText, duration)
            .setTextColor(Color.BLACK)
            .setBackgroundTint(Color.parseColor(snackbarBackgroundTint))
            .show()
}
t
Ohh...
j
so you do someView.showsnackbar(..)
t
Thanks for this 😄
🙂 1
m
Extensions and Activity apart, if I were to write a singleton utility I wouldn’t use any of the above, just:
Copy code
object SnackbarUtils {
    fun makeSnackbar() {
    }
}
👍 4
c
Yeah, I think I'd go extension function as well, but I do sometimes worry (too much) about polluting a specific type with too many extensions.