https://kotlinlang.org logo
#codereview
Title
# codereview
t

therealbluepandabear

10/29/2021, 8:47 AM
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

Javier

10/29/2021, 8:48 AM
no one for me
3
t

therealbluepandabear

10/29/2021, 8:49 AM
What would you use then?
j

Javier

10/29/2021, 8:49 AM
fun Activity.makeSnackbar(...)
or something so, no class, no object
t

therealbluepandabear

10/29/2021, 8:49 AM
Yeah but that can clutter activity code 😕
My current activity has 250 lines
j

Javier

10/29/2021, 8:49 AM
it is a extension function
t

therealbluepandabear

10/29/2021, 8:50 AM
Oh true...
Make sense
j

Javier

10/29/2021, 8:50 AM
you can put it wherever you want
t

therealbluepandabear

10/29/2021, 8:50 AM
Isn't MVVM a better choice than just extension functions?
j

Javier

10/29/2021, 8:50 AM
i.e. SnackbarExtensions.kt
this is not related to the architecture
t

therealbluepandabear

10/29/2021, 8:50 AM
Hm ok
j

Javier

10/29/2021, 8:50 AM
just UI showing UI
t

therealbluepandabear

10/29/2021, 8:50 AM
So I shouldn't make a new class for it? Is it bad if I do?
Is it valid, or?
j

Javier

10/29/2021, 8:51 AM
it is not wrong but I dont see any advantage of doing that instead of using an extension func
t

therealbluepandabear

10/29/2021, 8:51 AM
Ok
j

Javier

10/29/2021, 8:51 AM
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

therealbluepandabear

10/29/2021, 8:52 AM
If I want to use a certain snackbar style app wide isn't it bad if it's confined to a certain activity?
j

Javier

10/29/2021, 8:52 AM
don't have a lot of sense instantiating a class about snackbars in the viewmodel for example
t

therealbluepandabear

10/29/2021, 8:52 AM
Cause I'm using the snackbar in multiple activities
j

Javier

10/29/2021, 8:53 AM
extension function of a generic activity, not specific one
or a Fragment.
t

therealbluepandabear

10/29/2021, 8:53 AM
Oh nice! Never knew you could do taht
that*
j

Javier

10/29/2021, 8:53 AM
so you can use it in all activities or fragments
t

therealbluepandabear

10/29/2021, 8:53 AM
Gotcha... I will work on it
hey I have a question
It's saying that 'Activity.' is redundant
j

Javier

10/29/2021, 9:03 AM
code
t

therealbluepandabear

10/29/2021, 9:03 AM
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

Javier

10/29/2021, 9:03 AM
you are not passing the activity there
t

therealbluepandabear

10/29/2021, 9:04 AM
Oh can you teach me how to do it bro
j

Javier

10/29/2021, 9:04 AM
Copy code
fun View.showSnackbar(snackbarText: String, duration: Int) {
    Snackbar.make(this, snackbarText, duration)
            .setTextColor(Color.BLACK)
            .setBackgroundTint(Color.parseColor(snackbarBackgroundTint))
            .show()
}
t

therealbluepandabear

10/29/2021, 9:04 AM
Ohh...
j

Javier

10/29/2021, 9:04 AM
so you do someView.showsnackbar(..)
t

therealbluepandabear

10/29/2021, 9:05 AM
Thanks for this 😄
🙂 1
m

Matteo Mirk

10/29/2021, 9:49 AM
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

Colton Idle

10/29/2021, 2:12 PM
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.
3 Views