From f5a93ffe7f0cf10c8071863ddf384fcc19ea6464 Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Mon, 11 Mar 2024 16:19:56 +0200
Subject: [PATCH] Integrate add email to settings

---
 .../circles/feature/settings/SettingsDataSource.kt     |  4 ++++
 .../futo/circles/feature/settings/SettingsFragment.kt  | 10 +++++++++-
 .../futo/circles/feature/settings/SettingsViewModel.kt |  8 ++++++++
 app/src/main/res/layout/fragment_settings.xml          |  4 ++--
 auth/src/main/res/values/strings.xml                   |  2 +-
 core/src/main/res/values/strings.xml                   |  1 +
 6 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/app/src/main/java/org/futo/circles/feature/settings/SettingsDataSource.kt b/app/src/main/java/org/futo/circles/feature/settings/SettingsDataSource.kt
index b60abdd6c..70e635756 100644
--- a/app/src/main/java/org/futo/circles/feature/settings/SettingsDataSource.kt
+++ b/app/src/main/java/org/futo/circles/feature/settings/SettingsDataSource.kt
@@ -20,6 +20,10 @@ class SettingsDataSource @Inject constructor(
         session.accountService().deactivateAccount(false, authConfirmationProvider)
     }
 
+    suspend fun addEmailUIA() = createResult {
+        session.accountService().changeEmailStages(authConfirmationProvider)
+    }
+
     suspend fun changePasswordUIA() =
         changePasswordDataSource.changePasswordUIA(authConfirmationProvider)
 
diff --git a/app/src/main/java/org/futo/circles/feature/settings/SettingsFragment.kt b/app/src/main/java/org/futo/circles/feature/settings/SettingsFragment.kt
index 8eb9e52ad..feb782460 100644
--- a/app/src/main/java/org/futo/circles/feature/settings/SettingsFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/settings/SettingsFragment.kt
@@ -71,8 +71,11 @@ class SettingsFragment : Fragment(R.layout.fragment_settings), ReAuthCancellatio
                 }
             }
             tvSwitchUser.setOnClickListener { withConfirmation(SwitchUser()) { (activity as? MainActivity)?.stopSyncAndRestart() } }
-
             tvChangePassword.setOnClickListener { viewModel.handleChangePasswordFlow() }
+            tvAddEmail.setOnClickListener {
+                loadingDialog.handleLoading(LoadingData())
+                viewModel.handleChangeEmailFlow()
+            }
             tvDeactivate.setOnClickListener {
                 withConfirmation(DeactivateAccount()) {
                     loadingDialog.handleLoading(LoadingData())
@@ -105,6 +108,11 @@ class SettingsFragment : Fragment(R.layout.fragment_settings), ReAuthCancellatio
         viewModel.navigateToMatrixChangePasswordEvent.observeData(this) {
             navigator.navigateToMatrixChangePassword()
         }
+        viewModel.addEmailLiveData.observeResponse(this,
+            success = { showSuccess(getString(org.futo.circles.core.R.string.email_added)) },
+            error = { showError(getString(org.futo.circles.auth.R.string.invalid_auth)) },
+            onRequestInvoked = { loadingDialog.dismiss() }
+        )
         viewModel.changePasswordResponseLiveData.observeResponse(this,
             success = { showSuccess(getString(org.futo.circles.core.R.string.password_changed)) },
             error = { message -> showError(message) },
diff --git a/app/src/main/java/org/futo/circles/feature/settings/SettingsViewModel.kt b/app/src/main/java/org/futo/circles/feature/settings/SettingsViewModel.kt
index d9e7a06c7..2d7da0cfd 100644
--- a/app/src/main/java/org/futo/circles/feature/settings/SettingsViewModel.kt
+++ b/app/src/main/java/org/futo/circles/feature/settings/SettingsViewModel.kt
@@ -23,6 +23,7 @@ class SettingsViewModel @Inject constructor(
     val startReAuthEventLiveData = settingsDataSource.startReAuthEventLiveData
     val logOutLiveData = SingleEventLiveData<Response<Unit?>>()
     val deactivateLiveData = SingleEventLiveData<Response<Unit?>>()
+    val addEmailLiveData = SingleEventLiveData<Response<Unit?>>()
     val navigateToMatrixChangePasswordEvent = SingleEventLiveData<Unit>()
     val changePasswordResponseLiveData = SingleEventLiveData<Response<Unit?>>()
     val mediaUsageInfoLiveData = SingleEventLiveData<Response<MediaUsageInfo?>>()
@@ -54,6 +55,13 @@ class SettingsViewModel @Inject constructor(
         }
     }
 
+    fun handleChangeEmailFlow() {
+        launchBg {
+            val result = settingsDataSource.addEmailUIA()
+            addEmailLiveData.postValue(result)
+        }
+    }
+
     private suspend fun createNewBackupInNeeded() {
         val createBackupResult = settingsDataSource.createNewBackupIfNeeded()
         changePasswordResponseLiveData.postValue(createBackupResult)
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index 0d1564b6e..4c1c03e1e 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -123,11 +123,11 @@
             app:optionName="@string/change_password" />
 
         <org.futo.circles.core.view.SettingsMenuItemView
-            android:id="@+id/tvChangeEmail"
+            android:id="@+id/tvAddEmail"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             app:optionIcon="@drawable/ic_email"
-            app:optionName="@string/change_email_address" />
+            app:optionName="@string/add_email_address" />
 
         <org.futo.circles.core.view.SettingsMenuItemView
             android:id="@+id/tvClearCache"
diff --git a/auth/src/main/res/values/strings.xml b/auth/src/main/res/values/strings.xml
index d8fe8dc58..c54caa5a0 100644
--- a/auth/src/main/res/values/strings.xml
+++ b/auth/src/main/res/values/strings.xml
@@ -91,7 +91,7 @@
     <string name="switch_user_message">Are you sure you want to switch user?</string>
     <string name="switch_str">Switch</string>
     <string name="change_password">Change password</string>
-    <string name="change_email_address">Change email address</string>
+    <string name="add_email_address">Add email address</string>
     <string name="new_password">New password</string>
     <string name="old_password">Old Password</string>
     <string name="repeat_new_password">Repeat new password</string>
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index 5e2533502..606a914d6 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -54,6 +54,7 @@
     <string name="save">Save</string>
     <string name="select_items_from_list_below">Select items from list below</string>
     <string name="password_changed">Password changed</string>
+    <string name="email_added">Email added</string>
     <string name="remove">Remove</string>
     <string name="choose_gallery">Choose gallery</string>
     <string name="pick_media">Pick media</string>
-- 
GitLab