From 851a475757b6287f14542d932f283af3f923a4e1 Mon Sep 17 00:00:00 2001
From: Pierre NICOLAS <pierre.nicolas@savoirfairelinux.com>
Date: Fri, 1 Dec 2023 10:40:54 -0500
Subject: [PATCH] plugin: improve load/unload plugin user experience

GitLab: #1475

Change-Id: I8838d5d8885ee30b06e74e379033c1a012b12fc1
---
 .../settings/pluginssettings/PluginsListAdapter.kt   |  3 +++
 .../pluginssettings/PluginsListSettingsFragment.kt   | 12 ++++++++++--
 jami-android/app/src/main/res/values/strings.xml     |  5 +++++
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListAdapter.kt b/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListAdapter.kt
index a7990b5c1..e7b5f7ffd 100644
--- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListAdapter.kt
+++ b/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListAdapter.kt
@@ -29,6 +29,9 @@ class PluginsListAdapter(private var mList: List<PluginDetails>, private val lis
         return PluginSettingViewHolder(view, listener)
     }
 
+    fun notifyItemChanged(pluginDetails: PluginDetails) =
+        mList.indexOf(pluginDetails).let { if (it != -1) notifyItemChanged(it) }
+
     override fun onBindViewHolder(holderSetting: PluginSettingViewHolder, position: Int) {
         for (item in mList) {
             item.accountId = accountId
diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.kt b/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.kt
index ae0d9eec6..7749fe516 100644
--- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.kt
@@ -87,14 +87,22 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener {
      * @param pluginDetails instance of a plugin details that is sent to PluginSettingsFragment
      */
     override fun onPluginEnabled(pluginDetails: PluginDetails) {
+        var status: String?
+
         if (pluginDetails.isEnabled) {
             pluginDetails.isEnabled = loadPlugin(pluginDetails.rootPath)
+            status =
+                if (pluginDetails.isEnabled) getString(R.string.load_sucess, pluginDetails.name)
+                else {
+                    mAdapter?.notifyItemChanged(pluginDetails)
+                    getString(R.string.unable_to_load, pluginDetails.name)
+                }
         } else {
             unloadPlugin(pluginDetails.rootPath)
+            status = getString(R.string.unload_sucess, pluginDetails.name)
         }
-        val status = if (pluginDetails.isEnabled) "ON" else "OFF"
         Toast.makeText(
-            requireContext(), pluginDetails.name + " " + status,
+            requireContext(), status,
             Toast.LENGTH_SHORT
         ).show()
     }
diff --git a/jami-android/app/src/main/res/values/strings.xml b/jami-android/app/src/main/res/values/strings.xml
index 0b2bdec89..efecc89de 100644
--- a/jami-android/app/src/main/res/values/strings.xml
+++ b/jami-android/app/src/main/res/values/strings.xml
@@ -476,4 +476,9 @@ along with this program; if not, write to the Free Software
     <string name="donation_setting_description">Enable the donation reminder</string>
     <string name="donation_url" translatable="false">https://crowdfunding.lfx.linuxfoundation.org/projects/jami-a-gnu-package</string>
 
+    <!--  Plugin  -->
+    <string name="unable_to_load">Unable to load %1$s</string>
+    <string name="load_sucess">%1$s: enabled</string>
+    <string name="unload_sucess">%1$s: disabled</string>
+
 </resources>
-- 
GitLab