From 04117d844817739f5dae1de514eb5d368797f1b5 Mon Sep 17 00:00:00 2001
From: Alexander Lussier-Cullen <alexander.lussier-cullen@savoirfairelinux.com>
Date: Thu, 2 May 2024 12:27:24 -0400
Subject: [PATCH] PluginsListSettingsFragment: add loading popup during
 installation

GitLab: #1493
Change-Id: Iabfadc05dde8ab48ed0c7729701fd75c64ccce09
---
 .../PluginsListSettingsFragment.kt            | 21 +++++++++++++++++++
 1 file changed, 21 insertions(+)

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 514a988b0..4cfc3794d 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
@@ -18,6 +18,8 @@ package cx.ring.settings.pluginssettings
 
 import android.app.Activity
 import android.content.Intent
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
 import android.net.Uri
 import android.os.Bundle
 import android.util.Log
@@ -25,11 +27,14 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.Toast
+import androidx.appcompat.app.AlertDialog
 import androidx.fragment.app.Fragment
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.google.android.material.snackbar.Snackbar
 import cx.ring.R
 import cx.ring.account.AccountEditionFragment
 import cx.ring.databinding.FragPluginsListSettingsBinding
+import cx.ring.databinding.ItemProgressDialogBinding
 import cx.ring.interfaces.AppBarStateListener
 import cx.ring.plugins.PluginUtils.getInstalledPlugins
 import cx.ring.plugins.PluginUtils.loadPlugin
@@ -47,6 +52,7 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener {
     private var binding: FragPluginsListSettingsBinding? = null
     private var mAdapter: PluginsListAdapter? = null
     private val mCompositeDisposable = CompositeDisposable()
+    private var mProgress: AlertDialog? = null
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
         binding = FragPluginsListSettingsBinding.inflate(inflater, container, false)
@@ -139,7 +145,20 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener {
         }
     }
 
+    private fun showLoading(show: Boolean) {
+        val progress = mProgress
+        if(show && (progress == null || !progress.isShowing))
+            mProgress = MaterialAlertDialogBuilder(requireContext())
+                    .setView(ItemProgressDialogBinding.inflate(layoutInflater).root)
+                    .setBackground(ColorDrawable(Color.TRANSPARENT))
+                    .setCancelable(false)
+                    .show()
+        else if(!show && progress != null && progress.isShowing)
+            progress.dismiss()
+    }
+
     private fun installPluginFromUri(uri: Uri, force: Boolean) {
+        showLoading(true)
         mCompositeDisposable.add(
             getCacheFile(requireContext(), uri)
                 .observeOn(AndroidSchedulers.mainThread())
@@ -154,6 +173,7 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener {
                         }
                     }
                     mAdapter!!.updatePluginsList(getInstalledPlugins(requireContext()))
+                    showLoading(false)
                     Toast.makeText(requireContext(), "Plugin: $filename successfully installed", Toast.LENGTH_LONG)
                         .show()
                 }) { e: Throwable ->
@@ -162,6 +182,7 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener {
                         sb.setAction(R.string.plugin_force_install) { v: View? -> installPluginFromUri(uri, true) }
                         sb.show()
                     }
+                    showLoading(false)
                 })
     }
 
-- 
GitLab