Skip to content
Snippets Groups Projects
Commit 64187388 authored by Taras's avatar Taras
Browse files

Show buttons depending on flow result

parent 72bc263d
No related branches found
No related tags found
No related merge requests found
......@@ -47,11 +47,11 @@ class SelectSignUpTypeDataSource @Inject constructor(
}
// Must start with org.futo.subscriptions.free_forever
private fun getFreeSignupStages(flows: List<List<Stage>>): List<Stage>? =
fun getFreeSignupStages(flows: List<List<Stage>>): List<Stage>? =
flows.firstOrNull { (it.firstOrNull() as? Stage.Other)?.type == REGISTRATION_FREE_TYPE }
// Must start with org.futo.subscription.google_play
private fun getSubscriptionSignupStages(flows: List<List<Stage>>): List<Stage>? =
fun getSubscriptionSignupStages(flows: List<List<Stage>>): List<Stage>? =
flows.firstOrNull { (it.firstOrNull() as? Stage.Other)?.type == REGISTRATION_SUBSCRIPTION_TYPE }
}
\ No newline at end of file
......@@ -12,7 +12,10 @@ import org.futo.circles.auth.R
import org.futo.circles.auth.databinding.FragmentSelectSignUpTypeBinding
import org.futo.circles.core.base.CirclesAppConfig
import org.futo.circles.core.base.fragment.HasLoadingState
import org.futo.circles.core.extensions.gone
import org.futo.circles.core.extensions.observeResponse
import org.futo.circles.core.extensions.setIsVisible
import org.futo.circles.core.extensions.showError
@AndroidEntryPoint
class SelectSignUpTypeFragment : Fragment(R.layout.fragment_select_sign_up_type),
......@@ -33,6 +36,7 @@ class SelectSignUpTypeFragment : Fragment(R.layout.fragment_select_sign_up_type)
private fun setupViews() {
with(binding) {
serverDomainGroup.setOnCheckedChangeListener { _, _ ->
setFlowsLoading(true)
viewModel.loadSignupFlowsForDomain(getDomain())
}
CirclesAppConfig.serverDomains.forEach { domain ->
......@@ -57,6 +61,29 @@ class SelectSignUpTypeFragment : Fragment(R.layout.fragment_select_sign_up_type)
private fun setupObservers() {
viewModel.startSignUpEventLiveData.observeResponse(this)
viewModel.signupFlowsLiveData.observeResponse(this,
success = {
val hasSubscriptionFlow = viewModel.hasSubscriptionFlow(it)
val hasFreeFlow = viewModel.hasFreeFlow(it)
with(binding) {
btnSubscription.setIsVisible(hasSubscriptionFlow)
btnFree.setIsVisible(hasFreeFlow)
tvOr.setIsVisible(hasFreeFlow && hasSubscriptionFlow)
}
},
error = { message ->
showError(message)
binding.lButtonsContainer.gone()
},
onRequestInvoked = { setFlowsLoading(false) }
)
}
private fun setFlowsLoading(isLoading: Boolean) {
with(binding) {
lButtonsContainer.setIsVisible(!isLoading)
flowProgress.setIsVisible(isLoading)
}
}
private fun getDomain() =
......
......@@ -5,6 +5,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel
import org.futo.circles.core.base.SingleEventLiveData
import org.futo.circles.core.extensions.Response
import org.futo.circles.core.extensions.launchBg
import org.matrix.android.sdk.api.auth.registration.Stage
import javax.inject.Inject
@HiltViewModel
......@@ -13,6 +14,7 @@ class SelectSignUpTypeViewModel @Inject constructor(
) : ViewModel() {
val startSignUpEventLiveData = SingleEventLiveData<Response<Unit?>>()
val signupFlowsLiveData = SingleEventLiveData<Response<List<List<Stage>>>>()
fun startSignUp(isSubscription: Boolean) {
launchBg {
......@@ -26,7 +28,16 @@ class SelectSignUpTypeViewModel @Inject constructor(
}
fun loadSignupFlowsForDomain(domain: String) {
launchBg { dataSource.getAuthFlowsFor(domain) }
launchBg {
val result = dataSource.getAuthFlowsFor(domain)
signupFlowsLiveData.postValue(result)
}
}
fun hasSubscriptionFlow(flows: List<List<Stage>>): Boolean =
dataSource.getSubscriptionSignupStages(flows) != null
fun hasFreeFlow(flows: List<List<Stage>>): Boolean =
dataSource.getFreeSignupStages(flows) != null
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingHorizontal="24dp"
......@@ -45,43 +46,53 @@
app:layout_constraintTop_toBottomOf="@id/tvServerTitle" />
<org.futo.circles.core.view.LoadingButton
android:id="@+id/btnFree"
<LinearLayout
android:id="@+id/lButtonsContainer"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="@string/sign_up_for_free"
android:orientation="vertical"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/serverDomainGroup" />
app:layout_constraintTop_toBottomOf="@id/serverDomainGroup"
tools:visibility="visible">
<TextView
android:id="@+id/tvOr"
style="@style/headline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center"
android:text="@string/or"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnFree" />
<org.futo.circles.core.view.LoadingButton
android:id="@+id/btnFree"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="@string/sign_up_for_free" />
<org.futo.circles.core.view.LoadingButton
android:id="@+id/btnSubscription"
android:layout_width="0dp"
<TextView
android:id="@+id/tvOr"
style="@style/headline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:text="@string/or" />
<org.futo.circles.core.view.LoadingButton
android:id="@+id/btnSubscription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/sign_up_with_subscription" />
</LinearLayout>
<ProgressBar
android:id="@+id/flowProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/sign_up_with_subscription"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvOr" />
<androidx.constraintlayout.widget.Group
android:id="@+id/groupFree"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="tvOr,btnFree" />
app:layout_constraintTop_toBottomOf="@id/serverDomainGroup"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment