From 26ad19e4d963d4822e0539f39187cca6d6dba6de Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Wed, 28 Jun 2023 14:26:59 +0300
Subject: [PATCH] Change snack bar to allert dialog

---
 .../circles/setup/SetupCirclesFragment.kt     |  2 +-
 .../feature/people/user/UserDialogFragment.kt |  2 +-
 .../invite/InviteMembersDialogFragment.kt     |  2 +-
 .../well_known/RoomWellKnownDialogFragment.kt |  2 +-
 .../ChangePasswordDialogFragment.kt           |  2 +-
 .../profile/edit/EditProfileDialogFragment.kt |  2 +-
 .../timeline/TimelineDialogFragment.kt        |  4 +-
 .../post/report/ReportDialogFragment.kt       |  2 +-
 .../log_in/stages/LogInStagesFragment.kt      |  2 +-
 .../core/extensions/FragmentExtensions.kt     | 57 +++++++++++--------
 .../core/rageshake/BugReportDialogFragment.kt |  2 +-
 .../room/update/UpdateRoomDialogFragment.kt   |  2 +-
 .../backup/MediaBackupDialogFragment.kt       |  2 +-
 .../preview/MediaPreviewDialogFragment.kt     |  2 +-
 .../save/SavePostToGalleyDialogFragment.kt    |  2 +-
 15 files changed, 48 insertions(+), 39 deletions(-)

diff --git a/app/src/main/java/org/futo/circles/feature/circles/setup/SetupCirclesFragment.kt b/app/src/main/java/org/futo/circles/feature/circles/setup/SetupCirclesFragment.kt
index 977f18183..221270c4c 100644
--- a/app/src/main/java/org/futo/circles/feature/circles/setup/SetupCirclesFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/circles/setup/SetupCirclesFragment.kt
@@ -58,7 +58,7 @@ class SetupCirclesFragment : Fragment(R.layout.fragment_setup_circles), HasLoadi
         viewModel.createCirclesResponseLiveData.observeResponse(this,
             success = {
                 loadingDialog.dismiss()
-                showSuccess(getString(R.string.circles_created), true)
+                showSuccess(getString(R.string.circles_created))
                 navigateToBottomMenuScreen()
             },
             error = {
diff --git a/app/src/main/java/org/futo/circles/feature/people/user/UserDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/people/user/UserDialogFragment.kt
index be21d584a..cc2ea9145 100644
--- a/app/src/main/java/org/futo/circles/feature/people/user/UserDialogFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/people/user/UserDialogFragment.kt
@@ -100,7 +100,7 @@ class UserDialogFragment : BaseFullscreenDialogFragment(DialogFragmentUserBindin
             success = { showSuccess(getString(R.string.request_sent)) })
         viewModel.ignoreUserLiveData.observeResponse(this,
             success = {
-                context?.let { showSuccess(it.getString(R.string.user_ignored), true) }
+                context?.let { showSuccess(it.getString(R.string.user_ignored)) }
                 onBackPressed()
             })
         viewModel.unIgnoreUserLiveData.observeResponse(this,
diff --git a/app/src/main/java/org/futo/circles/feature/room/invite/InviteMembersDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/room/invite/InviteMembersDialogFragment.kt
index 4c5c0aa0c..1ad122e02 100644
--- a/app/src/main/java/org/futo/circles/feature/room/invite/InviteMembersDialogFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/room/invite/InviteMembersDialogFragment.kt
@@ -54,7 +54,7 @@ class InviteMembersDialogFragment :
         }
         viewModel.inviteResultLiveData.observeResponse(this,
             success = {
-                showSuccess(getString(R.string.invitation_sent), true)
+                showSuccess(getString(R.string.invitation_sent))
                 onBackPressed()
             }
         )
diff --git a/app/src/main/java/org/futo/circles/feature/room/well_known/RoomWellKnownDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/room/well_known/RoomWellKnownDialogFragment.kt
index b72e2f96f..1cae59180 100644
--- a/app/src/main/java/org/futo/circles/feature/room/well_known/RoomWellKnownDialogFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/room/well_known/RoomWellKnownDialogFragment.kt
@@ -51,7 +51,7 @@ class RoomWellKnownDialogFragment :
         )
         viewModel.knockRequestLiveData.observeResponse(this,
             success = {
-                showSuccess(getString(R.string.request_sent), true)
+                showSuccess(getString(R.string.request_sent))
                 onBackPressed()
             },
             onRequestInvoked = { binding.btnRequest.setIsLoading(false) })
diff --git a/app/src/main/java/org/futo/circles/feature/settings/change_password/ChangePasswordDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/settings/change_password/ChangePasswordDialogFragment.kt
index 757417ed6..6cd59a7d0 100644
--- a/app/src/main/java/org/futo/circles/feature/settings/change_password/ChangePasswordDialogFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/settings/change_password/ChangePasswordDialogFragment.kt
@@ -58,7 +58,7 @@ class ChangePasswordDialogFragment :
     private fun setupObservers() {
         viewModel.responseLiveData.observeResponse(this,
             success = {
-                showSuccess(getString(R.string.password_changed), true)
+                showSuccess(getString(R.string.password_changed))
                 onBackPressed()
             },
             error = { message ->
diff --git a/app/src/main/java/org/futo/circles/feature/settings/profile/edit/EditProfileDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/settings/profile/edit/EditProfileDialogFragment.kt
index 43eb734a4..1d620e52d 100644
--- a/app/src/main/java/org/futo/circles/feature/settings/profile/edit/EditProfileDialogFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/settings/profile/edit/EditProfileDialogFragment.kt
@@ -60,7 +60,7 @@ class EditProfileDialogFragment :
         }
         viewModel.editProfileResponseLiveData.observeResponse(this,
             success = {
-                showSuccess(getString(R.string.profile_updated), true)
+                showSuccess(getString(R.string.profile_updated))
                 onBackPressed()
             }
         )
diff --git a/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt
index c2348e5e1..d0f1d8c0e 100644
--- a/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt
@@ -183,11 +183,11 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli
             context?.let { ShareProvider.share(it, content) }
         }
         viewModel.saveToDeviceLiveData.observeData(this) {
-            context?.let { showSuccess(it.getString(R.string.saved), true) }
+            context?.let { showSuccess(it.getString(R.string.saved)) }
         }
         viewModel.ignoreUserLiveData.observeResponse(this,
             success = {
-                context?.let { showSuccess(it.getString(R.string.user_ignored), true) }
+                context?.let { showSuccess(it.getString(R.string.user_ignored)) }
             })
         viewModel.unSendReactionLiveData.observeResponse(this)
         viewModel.leaveGroupLiveData.observeResponse(this,
diff --git a/app/src/main/java/org/futo/circles/feature/timeline/post/report/ReportDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/timeline/post/report/ReportDialogFragment.kt
index 22e416aa2..9736c202b 100644
--- a/app/src/main/java/org/futo/circles/feature/timeline/post/report/ReportDialogFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/timeline/post/report/ReportDialogFragment.kt
@@ -47,7 +47,7 @@ class ReportDialogFragment :
 
     private fun setupObservers() {
         viewModel.reportLiveData.observeResponse(this) {
-            showSuccess(getString(R.string.report_sent), true)
+            showSuccess(getString(R.string.report_sent))
             onBackPressed()
         }
         viewModel.reportCategoriesLiveData.observeData(this) {
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/log_in/stages/LogInStagesFragment.kt b/auth/src/main/java/org/futo/circles/auth/feature/log_in/stages/LogInStagesFragment.kt
index 2484a524d..91ceb1411 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/log_in/stages/LogInStagesFragment.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/log_in/stages/LogInStagesFragment.kt
@@ -72,7 +72,7 @@ class LogInStagesFragment : Fragment(R.layout.fragment_login_stages),
         viewModel.restoreKeysLiveData.observeResponse(
             this,
             error = {
-                showError(it, true)
+                showError(it)
                 loadingDialog.dismiss()
             }
         )
diff --git a/core/src/main/java/org/futo/circles/core/extensions/FragmentExtensions.kt b/core/src/main/java/org/futo/circles/core/extensions/FragmentExtensions.kt
index 9e10c87de..51afe62b8 100644
--- a/core/src/main/java/org/futo/circles/core/extensions/FragmentExtensions.kt
+++ b/core/src/main/java/org/futo/circles/core/extensions/FragmentExtensions.kt
@@ -1,60 +1,69 @@
 package org.futo.circles.core.extensions
 
-import android.annotation.SuppressLint
+import android.app.ActionBar.LayoutParams
+import android.content.Context
 import android.content.Intent
 import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.graphics.drawable.InsetDrawable
 import android.net.Uri
 import android.os.Build
+import android.os.Handler
+import android.os.Looper
 import android.provider.Settings
 import android.view.Gravity
 import android.view.View
 import android.view.ViewGroup
-import android.widget.FrameLayout
+import android.view.WindowManager
 import android.widget.TextView
 import androidx.annotation.StringRes
+import androidx.appcompat.app.AlertDialog
 import androidx.appcompat.app.AppCompatActivity
 import androidx.appcompat.widget.Toolbar
 import androidx.fragment.app.Fragment
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
-import com.google.android.material.snackbar.Snackbar
 import org.futo.circles.core.R
 import org.futo.circles.core.fragment.BaseFullscreenDialogFragment
 import org.futo.circles.core.model.ConfirmationType
 
-private const val SNACK_BAR_DURATION = 3500
 
-@SuppressLint("InflateParams")
-private fun Fragment.showBar(message: String, isError: Boolean, showOnActivity: Boolean) {
-    val parentView = if (showOnActivity) activity?.findViewById(android.R.id.content) else view
-    parentView ?: return
-
-    val snack: Snackbar = Snackbar.make(parentView, message, SNACK_BAR_DURATION)
-    snack.view.setBackgroundColor(Color.TRANSPARENT)
-
-    val snackLayout = snack.view as Snackbar.SnackbarLayout
-    snackLayout.setPadding(0, 0, 0, 0)
+private const val MESSAGE_BAR_DURATION = 3500L
 
+private fun Fragment.showDialogBar(message: String, isError: Boolean) {
+    val context = (activity as? Context) ?: return
     val customSnackView = layoutInflater.inflate(
         if (isError) R.layout.view_error_snack_bar else R.layout.view_success_snack_bar,
         null
     ).apply {
         findViewById<TextView>(R.id.tvMessage)?.text = message
     }
-    snackLayout.addView(customSnackView, 0)
-
-    val layoutParams = (snack.view.layoutParams as? FrameLayout.LayoutParams)?.also { params ->
-        params.gravity = Gravity.TOP
+    val dialog = AlertDialog.Builder(context)
+        .setView(customSnackView)
+        .create()
+    dialog.window?.apply {
+        setFlags(
+            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
+            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
+        )
+        setBackgroundDrawable(InsetDrawable(ColorDrawable(Color.TRANSPARENT), 20))
+        setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)
+        setGravity(Gravity.TOP)
+        clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
     }
-    snack.view.layoutParams = layoutParams
-    snack.show()
+    dialog.show()
+
+    val handler = Handler(Looper.getMainLooper())
+    val runnable = Runnable { if (dialog.isShowing) dialog.dismiss() }
+    dialog.setOnDismissListener { handler.removeCallbacks(runnable) }
+    handler.postDelayed(runnable, MESSAGE_BAR_DURATION)
 }
 
-fun Fragment.showError(message: String, showOnActivity: Boolean = false) {
-    showBar(message, true, showOnActivity)
+fun Fragment.showError(message: String) {
+    showDialogBar(message, true)
 }
 
-fun Fragment.showSuccess(message: String, showOnActivity: Boolean = false) {
-    showBar(message, false, showOnActivity)
+fun Fragment.showSuccess(message: String) {
+    showDialogBar(message, false)
 }
 
 fun Fragment.setEnabledViews(enabled: Boolean, viewsToExclude: List<View> = emptyList()) {
diff --git a/core/src/main/java/org/futo/circles/core/rageshake/BugReportDialogFragment.kt b/core/src/main/java/org/futo/circles/core/rageshake/BugReportDialogFragment.kt
index ad843e1b0..a1e69b1c8 100644
--- a/core/src/main/java/org/futo/circles/core/rageshake/BugReportDialogFragment.kt
+++ b/core/src/main/java/org/futo/circles/core/rageshake/BugReportDialogFragment.kt
@@ -60,7 +60,7 @@ class BugReportDialogFragment :
         }
         viewModel.sendReportLiveData.observeResponse(this,
             success = {
-                showSuccess(getString(R.string.report_sent), true)
+                showSuccess(getString(R.string.report_sent))
                 dismiss()
             }
         )
diff --git a/core/src/main/java/org/futo/circles/core/room/update/UpdateRoomDialogFragment.kt b/core/src/main/java/org/futo/circles/core/room/update/UpdateRoomDialogFragment.kt
index c22239d52..1e5eefceb 100644
--- a/core/src/main/java/org/futo/circles/core/room/update/UpdateRoomDialogFragment.kt
+++ b/core/src/main/java/org/futo/circles/core/room/update/UpdateRoomDialogFragment.kt
@@ -62,7 +62,7 @@ abstract class UpdateRoomDialogFragment(inflate: (LayoutInflater, ViewGroup?, Bo
         }
         viewModel.updateGroupResponseLiveData.observeResponse(this,
             success = {
-                showSuccess(getString(successMessageResId), true)
+                showSuccess(getString(successMessageResId))
                 onBackPressed()
             }
         )
diff --git a/gallery/src/main/java/org/futo/circles/gallery/feature/backup/MediaBackupDialogFragment.kt b/gallery/src/main/java/org/futo/circles/gallery/feature/backup/MediaBackupDialogFragment.kt
index d1f3e322f..53faacedc 100644
--- a/gallery/src/main/java/org/futo/circles/gallery/feature/backup/MediaBackupDialogFragment.kt
+++ b/gallery/src/main/java/org/futo/circles/gallery/feature/backup/MediaBackupDialogFragment.kt
@@ -86,7 +86,7 @@ class MediaBackupDialogFragment :
         }
         viewModel.saveBackupSettingsResultLiveData.observeResponse(this,
             success = {
-                showSuccess(getString(R.string.saved), true)
+                showSuccess(getString(R.string.saved))
                 onBackPressed()
             })
         viewModel.initialBackupSettingsLiveData.observeData(this) {
diff --git a/gallery/src/main/java/org/futo/circles/gallery/feature/preview/MediaPreviewDialogFragment.kt b/gallery/src/main/java/org/futo/circles/gallery/feature/preview/MediaPreviewDialogFragment.kt
index 566d81ce9..1fbb45a5a 100644
--- a/gallery/src/main/java/org/futo/circles/gallery/feature/preview/MediaPreviewDialogFragment.kt
+++ b/gallery/src/main/java/org/futo/circles/gallery/feature/preview/MediaPreviewDialogFragment.kt
@@ -144,7 +144,7 @@ class MediaPreviewDialogFragment :
             context?.let { ShareProvider.share(it, content) }
         }
         viewModel.downloadLiveData.observeData(this) {
-            context?.let { showSuccess(it.getString(R.string.saved), false) }
+            context?.let { showSuccess(it.getString(R.string.saved)) }
         }
     }
 
diff --git a/gallery/src/main/java/org/futo/circles/gallery/feature/save/SavePostToGalleyDialogFragment.kt b/gallery/src/main/java/org/futo/circles/gallery/feature/save/SavePostToGalleyDialogFragment.kt
index 10f4c99df..d1a235dec 100644
--- a/gallery/src/main/java/org/futo/circles/gallery/feature/save/SavePostToGalleyDialogFragment.kt
+++ b/gallery/src/main/java/org/futo/circles/gallery/feature/save/SavePostToGalleyDialogFragment.kt
@@ -60,7 +60,7 @@ class SavePostToGalleyDialogFragment :
     private fun setupObservers() {
         viewModel.saveResultLiveData.observeResponse(this,
             success = {
-                showSuccess(getString(R.string.saved), true)
+                showSuccess(getString(R.string.saved))
                 onBackPressed()
             }
         )
-- 
GitLab