From b2810bcef12135ce98504fcb180c86d41350d8ba Mon Sep 17 00:00:00 2001 From: Gautham Mohanraj <62511283+angrezichatterbox@users.noreply.github.com> Date: Fri, 13 Dec 2024 19:00:30 +0530 Subject: [PATCH] Resolve crash when submitting feedback without internet access (#6018) * fix: resolve crash when submitting feedback without internet access * feat:Added check for wheather internet connection was available for a network * feat:Added SnackBar for Retry and User Info * feat:Made the feedback dialog not leave screen in case of error * feat:Removed the network checking from the function * feat:Added try catch block for the Feedback * feat:Removed Unnecessary imports * feat:Used Snackbar and timber instead of log and Toast --------- Co-authored-by: Nicolas Raoul --- .../nrw/commons/feedback/FeedbackDialog.kt | 29 +++++++++++++++++-- .../commons/navtab/MoreBottomSheetFragment.kt | 8 +++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/feedback/FeedbackDialog.kt b/app/src/main/java/fr/free/nrw/commons/feedback/FeedbackDialog.kt index e0977c3d9..93cdab944 100644 --- a/app/src/main/java/fr/free/nrw/commons/feedback/FeedbackDialog.kt +++ b/app/src/main/java/fr/free/nrw/commons/feedback/FeedbackDialog.kt @@ -7,6 +7,7 @@ import android.text.Html import android.text.Spanned import android.text.method.LinkMovementMethod import android.view.WindowManager +import com.google.android.material.snackbar.Snackbar import fr.free.nrw.commons.R import fr.free.nrw.commons.databinding.DialogFeedbackBinding import fr.free.nrw.commons.feedback.model.Feedback @@ -17,6 +18,8 @@ import fr.free.nrw.commons.utils.DeviceInfoUtil.getConnectionType import fr.free.nrw.commons.utils.DeviceInfoUtil.getDevice import fr.free.nrw.commons.utils.DeviceInfoUtil.getDeviceManufacturer import fr.free.nrw.commons.utils.DeviceInfoUtil.getDeviceModel +import java.net.ConnectException +import java.net.UnknownHostException class FeedbackDialog( context: Context, @@ -41,9 +44,31 @@ class FeedbackDialog( @Suppress("DEPRECATION") window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) binding.btnSubmitFeedback.setOnClickListener { - submitFeedback() - } + try { + submitFeedback() + } catch (e: Exception) { + when (e) { + is UnknownHostException -> { + Snackbar.make(findViewById(android.R.id.content), + R.string.error_feedback, + Snackbar.LENGTH_SHORT).show() + } + is ConnectException -> { + Snackbar.make(findViewById(android.R.id.content), + R.string.error_feedback, + Snackbar.LENGTH_SHORT).show() + } + + else -> { + Snackbar.make(findViewById(android.R.id.content), + R.string.error_feedback, + Snackbar.LENGTH_SHORT).show() + } + } + } + + } } fun submitFeedback() { diff --git a/app/src/main/java/fr/free/nrw/commons/navtab/MoreBottomSheetFragment.kt b/app/src/main/java/fr/free/nrw/commons/navtab/MoreBottomSheetFragment.kt index bb83b56fe..a79df3e15 100644 --- a/app/src/main/java/fr/free/nrw/commons/navtab/MoreBottomSheetFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/navtab/MoreBottomSheetFragment.kt @@ -35,6 +35,7 @@ import fr.free.nrw.commons.settings.SettingsActivity import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers +import timber.log.Timber import javax.inject.Inject import javax.inject.Named @@ -182,14 +183,17 @@ class MoreBottomSheetFragment : BottomSheetDialogFragment() { Single.defer { single } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe { success -> + .subscribe({ success -> val messageResId = if (success) { R.string.thanks_feedback } else { R.string.error_feedback } Toast.makeText(requireContext(), getString(messageResId), Toast.LENGTH_SHORT).show() - } + }, { error -> + Timber.e(error) + Toast.makeText(requireContext(), R.string.error_feedback, Toast.LENGTH_SHORT).show() + }) } /**