Skip to content

Commit 48d2c30

Browse files
authored
Merge branch 'main' into lusa/vmextensions
2 parents 10ce2f1 + f941caf commit 48d2c30

File tree

3 files changed

+28
-15
lines changed

3 files changed

+28
-15
lines changed

app/src/main/java/com/monstarlab/arch/extensions/ViewExtensions.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,28 @@
11
package com.monstarlab.arch.extensions
22

33
import android.view.View
4+
import androidx.core.view.isVisible
45
import androidx.fragment.app.Fragment
56
import androidx.lifecycle.DefaultLifecycleObserver
67
import androidx.lifecycle.LifecycleOwner
78
import androidx.lifecycle.lifecycleScope
9+
import com.google.android.material.snackbar.Snackbar
10+
import com.monstarlab.core.sharedui.errorhandling.ViewError
811
import kotlinx.coroutines.channels.awaitClose
912
import kotlinx.coroutines.flow.*
1013

14+
fun Fragment.snackErrorFlow(targetFlow: SharedFlow<ViewError>, root: View, length: Int = Snackbar.LENGTH_SHORT) {
15+
collectFlow(targetFlow) { viewError ->
16+
Snackbar.make(root, viewError.message, length).show()
17+
}
18+
}
19+
20+
fun Fragment.visibilityFlow(targetFlow: Flow<Boolean>, vararg view: View) {
21+
collectFlow(targetFlow) { loading ->
22+
view.forEach { it.isVisible = loading }
23+
}
24+
}
25+
1126
fun <T> Fragment.collectFlow(targetFlow: Flow<T>, collectBlock: ((T) -> Unit)) {
1227
safeViewCollect {
1328
viewLifecycleOwner.lifecycleScope.launchWhenCreated {
@@ -85,5 +100,5 @@ fun View.clicks(throttleTime: Long = 400): Flow<Unit> = callbackFlow {
85100
awaitClose { this@clicks.setOnClickListener(null) }
86101
}.throttleFirst(throttleTime)
87102

88-
fun View.onClick(listenerBlock: (View) -> Unit) =
89-
setOnClickListener(DebounceOnClickListener(listenerBlock = listenerBlock))
103+
fun View.onClick(interval: Long = 400L, listenerBlock: (View) -> Unit) =
104+
setOnClickListener(DebounceOnClickListener(interval, listenerBlock))

app/src/main/java/com/monstarlab/features/login/LoginFragment.kt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.monstarlab.features.login
22

33
import android.os.Bundle
44
import android.view.View
5+
import androidx.core.view.isVisible
56
import androidx.lifecycle.lifecycleScope
67
import androidx.lifecycle.loadingFlow
78
import androidx.lifecycle.viewErrorFlow
@@ -10,13 +11,13 @@ import androidx.transition.TransitionManager
1011
import com.google.android.material.snackbar.Snackbar
1112
import com.monstarlab.R
1213
import com.monstarlab.arch.base.BaseFragment
13-
import com.monstarlab.arch.extensions.clicks
1414
import com.monstarlab.arch.extensions.collectFlow
1515
import com.monstarlab.arch.extensions.combineFlows
16+
import com.monstarlab.arch.extensions.snackErrorFlow
17+
import com.monstarlab.arch.extensions.onClick
1618
import com.monstarlab.arch.extensions.viewBinding
19+
import com.monstarlab.arch.extensions.visibilityFlow
1720
import com.monstarlab.databinding.FragmentLoginBinding
18-
import kotlinx.coroutines.flow.launchIn
19-
import kotlinx.coroutines.flow.onEach
2021

2122
class LoginFragment : BaseFragment(R.layout.fragment_login) {
2223

@@ -26,27 +27,25 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
2627
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
2728
super.onViewCreated(view, savedInstanceState)
2829

29-
binding.loginButton.clicks().onEach {
30+
binding.loginButton.onClick {
3031
viewModel.login(
31-
binding.loginEmailEditText.text.toString(),
32-
binding.loginPasswordEditText.text.toString()
32+
binding.loginEmailEditText.text.toString(),
33+
binding.loginPasswordEditText.text.toString()
3334
)
34-
}.launchIn(lifecycleScope)
35+
}
3536

3637
collectFlow(viewModel.loginResultFlow) {
3738
findNavController().navigate(R.id.resourceFragment)
3839
}
3940

40-
collectFlow(viewModel.viewErrorFlow) { viewError ->
41-
Snackbar.make(view, viewError.message, Snackbar.LENGTH_SHORT).show()
42-
}
41+
snackErrorFlow(viewModel.errorFlow, view)
42+
visibilityFlow(viewModel.loadingFlow, binding.loginProgressBar)
4343

4444
collectFlow(viewModel.loadingFlow) { loading ->
4545
TransitionManager.beginDelayedTransition(binding.root)
4646
binding.loginEmailEditText.isEnabled = !loading
4747
binding.loginPasswordEditText.isEnabled = !loading
48-
binding.loginButton.visibility = if(loading) View.GONE else View.VISIBLE
49-
binding.loginProgressBar.visibility = if(loading) View.VISIBLE else View.GONE
48+
binding.loginButton.isVisible = !loading
5049
}
5150
}
5251
}

app/src/main/java/com/monstarlab/injection/components/AppComponent.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import com.monstarlab.injection.modules.*
55
import dagger.Component
66
import dagger.android.AndroidInjector
77
import dagger.android.support.AndroidSupportInjectionModule
8-
import dk.nodes.template.injection.modules.*
98
import javax.inject.Singleton
109

1110
@Component(

0 commit comments

Comments
 (0)