From b7923091282a5e71acf207d6db81b1f48ce89c58 Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Thu, 16 Nov 2023 16:24:04 +0200
Subject: [PATCH] Add subscribe to email on registration

---
 .../sign_up/validate_email/ValidateEmailDataSource.kt     | 8 +++++++-
 .../sign_up/validate_email/ValidateEmailFragment.kt       | 5 +++++
 .../sign_up/validate_email/ValidateEmailViewModel.kt      | 5 ++++-
 auth/src/main/res/layout/fragment_validate_email.xml      | 2 +-
 4 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/validate_email/ValidateEmailDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/validate_email/ValidateEmailDataSource.kt
index 93fe0f9fd..0ae5902e3 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/validate_email/ValidateEmailDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/validate_email/ValidateEmailDataSource.kt
@@ -6,6 +6,7 @@ import org.futo.circles.auth.feature.sign_up.SignUpDataSource.Companion.REGISTRA
 import org.futo.circles.auth.feature.sign_up.SignUpDataSource.Companion.REGISTRATION_EMAIL_SUBMIT_TOKEN_TYPE
 import org.futo.circles.core.extensions.Response
 import org.matrix.android.sdk.api.auth.registration.RegistrationResult
+import org.matrix.android.sdk.api.auth.registration.Stage
 import javax.inject.Inject
 
 class ValidateEmailDataSource @Inject constructor(
@@ -19,7 +20,7 @@ class ValidateEmailDataSource @Inject constructor(
         mapOf(
             TYPE_PARAM_KEY to REGISTRATION_EMAIL_REQUEST_TOKEN_TYPE,
             EMAIL_PARAM_KEY to email,
-            //SUBSCRIBE_TO_LIST to subscribeToUpdates
+            SUBSCRIBE_TO_LIST to subscribeToUpdates
         )
     )
 
@@ -31,9 +32,14 @@ class ValidateEmailDataSource @Inject constructor(
             )
         )
 
+    fun shouldShowSubscribeToEmail(): Boolean =
+        (signUpDataSource.currentStage as? Stage.Other)?.params?.get(OFFER_LIST_SUBSCRIPTION_KEY) as? Boolean
+            ?: false
+
     companion object {
         private const val EMAIL_PARAM_KEY = "email"
         private const val TOKEN_PARAM_KEY = "token"
         private const val SUBSCRIBE_TO_LIST = "subscribe_to_list"
+        private const val OFFER_LIST_SUBSCRIPTION_KEY = "offer_list_subscription"
     }
 }
\ No newline at end of file
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/validate_email/ValidateEmailFragment.kt b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/validate_email/ValidateEmailFragment.kt
index 4d00dc1ba..da2ea239d 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/validate_email/ValidateEmailFragment.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/validate_email/ValidateEmailFragment.kt
@@ -13,7 +13,9 @@ import org.futo.circles.core.base.fragment.HasLoadingState
 import org.futo.circles.core.base.fragment.ParentBackPressOwnerFragment
 import org.futo.circles.core.extensions.getText
 import org.futo.circles.core.extensions.isValidEmail
+import org.futo.circles.core.extensions.observeData
 import org.futo.circles.core.extensions.observeResponse
+import org.futo.circles.core.extensions.setIsVisible
 import org.futo.circles.core.extensions.showDialog
 import org.futo.circles.core.extensions.showSuccess
 import org.futo.circles.core.extensions.visible
@@ -67,6 +69,9 @@ class ValidateEmailFragment : ParentBackPressOwnerFragment(R.layout.fragment_val
         viewModel.sendCodeLiveData.observeResponse(this,
             success = { validationCodeSentState() })
         viewModel.validateEmailLiveData.observeResponse(this)
+        viewModel.showSubscribeCheckLiveData.observeData(this) {
+            binding.cbEmailUpdates.setIsVisible(it)
+        }
     }
 
     private fun getEmailInput(): String = binding.tilEmail.getText()
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/validate_email/ValidateEmailViewModel.kt b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/validate_email/ValidateEmailViewModel.kt
index 3ea9d8bec..7dde2420a 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/validate_email/ValidateEmailViewModel.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/validate_email/ValidateEmailViewModel.kt
@@ -18,10 +18,13 @@ class ValidateEmailViewModel @Inject constructor(
     val validateEmailLiveData =
         SingleEventLiveData<Response<RegistrationResult>>()
 
+    val showSubscribeCheckLiveData = MutableLiveData(dataSource.shouldShowSubscribeToEmail())
 
     fun sendCode(email: String, subscribeToUpdates: Boolean) {
         launchBg {
-            sendCodeLiveData.postValue(dataSource.sendValidationCode(email, subscribeToUpdates))
+            val result = dataSource.sendValidationCode(email, subscribeToUpdates)
+            sendCodeLiveData.postValue(result)
+            if (result is Response.Success) showSubscribeCheckLiveData.postValue(false)
         }
     }
 
diff --git a/auth/src/main/res/layout/fragment_validate_email.xml b/auth/src/main/res/layout/fragment_validate_email.xml
index 5aea88782..8fb3c4e6e 100644
--- a/auth/src/main/res/layout/fragment_validate_email.xml
+++ b/auth/src/main/res/layout/fragment_validate_email.xml
@@ -120,7 +120,7 @@
         android:visibility="gone"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/btnSendCode" />
+        app:layout_constraintTop_toBottomOf="@id/tilValidationCode" />
 
     <org.futo.circles.core.view.LoadingButton
         android:id="@+id/btnValidate"
-- 
GitLab