From a4dd08ddb33f97e4e1bd92bd1eeb32a041698898 Mon Sep 17 00:00:00 2001
From: sim <git@sgougeon.fr>
Date: Wed, 24 Aug 2022 23:08:19 +0200
Subject: [PATCH] Always use register to open the distributor dialog

The forced unregistration always happens in register
function
---
 .../app/core/pushers/UnifiedPushHelper.kt     | 41 +++++++------------
 ...rSettingsNotificationPreferenceFragment.kt |  2 +-
 .../TestEndpointAsTokenRegistration.kt        |  2 +-
 3 files changed, 16 insertions(+), 29 deletions(-)

diff --git a/vector/src/main/java/im/vector/app/core/pushers/UnifiedPushHelper.kt b/vector/src/main/java/im/vector/app/core/pushers/UnifiedPushHelper.kt
index de5b881029..ec646440b6 100644
--- a/vector/src/main/java/im/vector/app/core/pushers/UnifiedPushHelper.kt
+++ b/vector/src/main/java/im/vector/app/core/pushers/UnifiedPushHelper.kt
@@ -46,6 +46,7 @@ class UnifiedPushHelper @Inject constructor(
         private val vectorFeatures: VectorFeatures,
         private val fcmHelper: FcmHelper,
 ) {
+
     fun register(
             activity: FragmentActivity,
             onDoneRunnable: Runnable? = null,
@@ -56,7 +57,14 @@ class UnifiedPushHelper @Inject constructor(
         )
     }
 
-    fun reRegister(
+    // If registration is forced:
+    // * the current distributor (if any) is removed
+    // * The dialog is opened
+    //
+    // The registration is forced in 2 cases :
+    // * in the settings
+    // * in the troubleshoot list (doFix)
+    fun forceRegister(
             activity: FragmentActivity,
             pushersManager: PushersManager,
             onDoneRunnable: Runnable? = null
@@ -86,7 +94,8 @@ class UnifiedPushHelper @Inject constructor(
                 // Un-register first
                 unregister(pushersManager)
             }
-            if (UnifiedPush.getDistributor(context).isNotEmpty()) {
+            // the !force should not be needed
+            if (!force && UnifiedPush.getDistributor(context).isNotEmpty()) {
                 UnifiedPush.registerApp(context)
                 onDoneRunnable?.run()
                 return@launch
@@ -94,42 +103,24 @@ class UnifiedPushHelper @Inject constructor(
 
             val distributors = UnifiedPush.getDistributors(context)
 
-            if (distributors.size == 1 && !force) {
+            if (!force && distributors.size == 1) {
                 UnifiedPush.saveDistributor(context, distributors.first())
                 UnifiedPush.registerApp(context)
                 onDoneRunnable?.run()
             } else {
                 openDistributorDialogInternal(
                         activity = activity,
-                        pushersManager = pushersManager,
                         onDoneRunnable = onDoneRunnable,
-                        distributors = distributors,
-                        unregisterFirst = force
+                        distributors = distributors
                 )
             }
         }
     }
 
-    fun openDistributorDialog(
-            activity: FragmentActivity,
-            pushersManager: PushersManager,
-            onDoneRunnable: Runnable,
-    ) {
-        val distributors = UnifiedPush.getDistributors(activity)
-        openDistributorDialogInternal(
-                activity,
-                pushersManager,
-                onDoneRunnable, distributors,
-                unregisterFirst = true,
-        )
-    }
-
     private fun openDistributorDialogInternal(
             activity: FragmentActivity,
-            pushersManager: PushersManager?,
             onDoneRunnable: Runnable?,
-            distributors: List<String>,
-            unregisterFirst: Boolean,
+            distributors: List<String>
     ) {
         val internalDistributorName = stringProvider.getString(
                 if (fcmHelper.isFirebaseAvailable()) {
@@ -157,10 +148,6 @@ class UnifiedPushHelper @Inject constructor(
                     }
 
                     activity.lifecycleScope.launch {
-                        if (unregisterFirst) {
-                            // Un-register first
-                            unregister(pushersManager)
-                        }
                         UnifiedPush.saveDistributor(context, distributor)
                         Timber.i("Saving distributor: $distributor")
                         UnifiedPush.registerApp(context)
diff --git a/vector/src/main/java/im/vector/app/features/settings/notifications/VectorSettingsNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/app/features/settings/notifications/VectorSettingsNotificationPreferenceFragment.kt
index a09bb1e6a4..ab25f83a91 100644
--- a/vector/src/main/java/im/vector/app/features/settings/notifications/VectorSettingsNotificationPreferenceFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/notifications/VectorSettingsNotificationPreferenceFragment.kt
@@ -158,7 +158,7 @@ class VectorSettingsNotificationPreferenceFragment :
             if (vectorFeatures.allowExternalUnifiedPushDistributors()) {
                 it.summary = unifiedPushHelper.getCurrentDistributorName()
                 it.onPreferenceClickListener = Preference.OnPreferenceClickListener {
-                    unifiedPushHelper.openDistributorDialog(requireActivity(), pushersManager) {
+                    unifiedPushHelper.forceRegister(requireActivity(), pushersManager) {
                         it.summary = unifiedPushHelper.getCurrentDistributorName()
                         session.pushersService().refreshPushers()
                         refreshBackgroundSyncPrefs()
diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestEndpointAsTokenRegistration.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestEndpointAsTokenRegistration.kt
index 66222f759e..7875e3a21d 100644
--- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestEndpointAsTokenRegistration.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestEndpointAsTokenRegistration.kt
@@ -60,7 +60,7 @@ class TestEndpointAsTokenRegistration @Inject constructor(
             )
             quickFix = object : TroubleshootQuickFix(R.string.settings_troubleshoot_test_endpoint_registration_quick_fix) {
                 override fun doFix() {
-                    unifiedPushHelper.reRegister(
+                    unifiedPushHelper.forceRegister(
                             context,
                             pushersManager
                     )