Skip to content

Instantly share code, notes, and snippets.

@n8ebel
Last active January 25, 2018 05:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save n8ebel/9bd1873be78d9c0f0da7c865a456c0a5 to your computer and use it in GitHub Desktop.
Save n8ebel/9bd1873be78d9c0f0da7c865a456c0a5 to your computer and use it in GitHub Desktop.
Activity subscription to a ViewModel SnackData PublishSubject
fun bindViewModel(root:View, viewModel: BaseViewModel) {
viewModel.snackPub.subscribe { snackData ->
showSnackbar(rootView, snackData)
}
}
/**
* Maps the passed [SnackData] to the appropriate UI representation of a [Snackbar]
*/
private fun showSnackbar(root: View, data: SnackData) {
fun configureSnackBar(newSnackbar: Snackbar, dissmissCallback:SnackFinishedListener, @StringRes actionMsgId:Int, actionCallback:SnackActionListener) {
snackbar = newSnackbar
snackbarDismissCallback = dissmissCallback
if (actionMsgId > 0) {
newSnackbar.setAction(actionMsgId, { actionCallback()})
}
}
// handle each of the SnackData states
when (data) {
NoSnack -> snackbar?.dismiss()
is ShortSnack -> with(Snackbar.make(root, data.msgId, Snackbar.LENGTH_SHORT)) {
configureSnackBar(this, data.dismissListener, data.actionMsgId, data.actionListener)
}
is LongSnack -> with(Snackbar.make(root, data.msgId, Snackbar.LENGTH_LONG)) {
configureSnackBar(this, data.dismissListener, data.actionMsgId, data.actionListener)
}
is StickySnack -> with(Snackbar.make(root, data.msgId, Snackbar.LENGTH_INDEFINITE)) {
configureSnackBar(this, data.dismissListener, data.actionMsgId, data.actionListener)
}
}
// setup a dismiss listener in case any listener needs to take action once the
// message is displayed
//
snackbar?.addCallback(object: BaseTransientBottomBar.BaseCallback<Snackbar>() {
override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
super.onDismissed(transientBottomBar, event)
snackbarDismissCallback?.invoke()
snackbar = null
snackbarDismissCallback = null
}
})
snackbar?.show()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment