Skip to content

Commit 0fa3641

Browse files
authored
Merge branch 'main' into feature/snack
2 parents 45a6555 + 4497394 commit 0fa3641

File tree

4 files changed

+31
-16
lines changed

4 files changed

+31
-16
lines changed

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
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
@@ -16,6 +17,12 @@ fun Fragment.snackErrorFlow(targetFlow: SharedFlow<ViewError>, root: View, lengt
1617
}
1718
}
1819

20+
fun Fragment.visibilityFlow(targetFlow: Flow<Boolean>, vararg view: View) {
21+
collectFlow(targetFlow) { loading ->
22+
view.forEach { it.isVisible = loading }
23+
}
24+
}
25+
1926
fun <T> Fragment.collectFlow(targetFlow: Flow<T>, collectBlock: ((T) -> Unit)) {
2027
safeViewCollect {
2128
viewLifecycleOwner.lifecycleScope.launchWhenCreated {
@@ -93,5 +100,5 @@ fun View.clicks(throttleTime: Long = 400): Flow<Unit> = callbackFlow {
93100
awaitClose { this@clicks.setOnClickListener(null) }
94101
}.throttleFirst(throttleTime)
95102

96-
fun View.onClick(listenerBlock: (View) -> Unit) =
97-
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: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,20 @@ 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
6-
import androidx.lifecycle.viewModelScope
77
import androidx.navigation.fragment.findNavController
88
import androidx.transition.TransitionManager
99
import com.google.android.material.snackbar.Snackbar
1010
import com.monstarlab.R
1111
import com.monstarlab.arch.base.BaseFragment
12-
import com.monstarlab.arch.extensions.clicks
1312
import com.monstarlab.arch.extensions.collectFlow
1413
import com.monstarlab.arch.extensions.combineFlows
1514
import com.monstarlab.arch.extensions.snackErrorFlow
15+
import com.monstarlab.arch.extensions.onClick
1616
import com.monstarlab.arch.extensions.viewBinding
17+
import com.monstarlab.arch.extensions.visibilityFlow
1718
import com.monstarlab.databinding.FragmentLoginBinding
18-
import kotlinx.coroutines.flow.launchIn
19-
import kotlinx.coroutines.flow.onEach
20-
import kotlinx.coroutines.launch
2119

2220
class LoginFragment : BaseFragment(R.layout.fragment_login) {
2321

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

30-
binding.loginButton.clicks().onEach {
28+
binding.loginButton.onClick {
3129
viewModel.login(
32-
binding.loginEmailEditText.text.toString(),
33-
binding.loginPasswordEditText.text.toString()
30+
binding.loginEmailEditText.text.toString(),
31+
binding.loginPasswordEditText.text.toString()
3432
)
35-
}.launchIn(lifecycleScope)
33+
}
3634

3735
collectFlow(viewModel.loginResultFlow) {
3836
findNavController().navigate(R.id.resourceFragment)
3937
}
4038

4139
snackErrorFlow(viewModel.errorFlow, view)
4240

41+
visibilityFlow(viewModel.loadingFlow, binding.loginProgressBar)
42+
4343
collectFlow(viewModel.loadingFlow) { loading ->
4444
TransitionManager.beginDelayedTransition(binding.root)
4545
binding.loginEmailEditText.isEnabled = !loading
4646
binding.loginPasswordEditText.isEnabled = !loading
47-
binding.loginButton.visibility = if(loading) View.GONE else View.VISIBLE
48-
binding.loginProgressBar.visibility = if(loading) View.VISIBLE else View.GONE
47+
binding.loginButton.isVisible = !loading
4948
}
5049
}
5150
}

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(

build.gradle

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,23 @@ buildscript {
4949
}
5050
}
5151

52+
plugins {
53+
id "com.diffplug.spotless" version "5.9.0"
54+
}
55+
5256
allprojects {
5357
repositories {
5458
google()
5559
jcenter()
5660
}
5761
}
5862

59-
task clean(type: Delete) {
60-
delete rootProject.buildDir
63+
subprojects {
64+
apply plugin: 'com.diffplug.spotless'
65+
spotless {
66+
kotlin {
67+
target "**/*.kt"
68+
ktlint('0.40.0')
69+
}
70+
}
6171
}

0 commit comments

Comments
 (0)