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 977f1818385edb7576314fd496fd826f6a74e646..221270c4c9bcba7a0bb9f520ea20775f602b1d2a 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 be21d584a3e69a687df2cace61e3fa11f8aa53e3..cc2ea9145960862128f49606169636413e7403e5 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 4c5c0aa0c983b09aa8513d0128bee6abc7570a70..1ad122e024fba5415cd839c5a7cc0ab9454cb20b 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 b72e2f96f2e6a4782b8f71e1e08114bc3d20789b..1cae59180fecc88a6d62a9f114c89108388a645d 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 757417ed692b6013f67654ef2e38b21f5fe69662..6cd59a7d019a82262e4e244e847826e3dc8cdb06 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 43eb734a4772b985cb75298bbc0ca9f3b15c78aa..1d620e52df9b9f653e8075828fa243a94251cec7 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 c2348e5e11be038696648ae8a35c77abfb04dae4..d0f1d8c0e007cd9b7db514bb0d8d64139e0f6e84 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 22e416aa21913a6b3a9a6456d1133c0b0eafbc6a..9736c202bf75d4a4dec2003d0e494dcb2e889962 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 2484a524dd0e4a65c9bbbed0e0473eb569e23c54..91ceb141102549b1a124bd88300deaf73f614a29 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 9e10c87de7bba9f7d289e201f02e4ade9935bdc2..51afe62b84dd84d3b44df2d325084094e1c494d8 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 ad843e1b085a7863b086921e2507938a5549c2ff..a1e69b1c80cd0b051ca7bf72b535774f09ad62f6 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 c22239d52d3be316927c154e451a45c8a390c309..1e5eefcebfa852cfa3e37ced9a5c7ffad7c788b7 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 d1f3e322f658c9379b6aa748e7810f9b33e78144..53faacedc289bbddd0896310fb298e19f3e0d4b7 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 566d81ce91a80a1e9fd5f26820e6cd0067ed75b2..1fbb45a5abf708e4f2a5c4df6e79d87f74420e54 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 10f4c99df6309ec37efea31ce42a805b67ee505c..d1a235decfcc4cf509eb18fc4243f329c741f399 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() } )