package com.quickblox.sample.core.utils; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.support.annotation.StringRes; import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; import android.view.View; import com.quickblox.core.exception.QBResponseException; import com.quickblox.sample.core.CoreApp; import com.quickblox.sample.core.R; import java.util.List; public class ErrorUtils { private static final String NO_CONNECTION_ERROR = "Connection failed. Please check your internet connection."; private static final String NO_RESPONSE_TIMEOUT = "No response received within reply timeout."; private static Handler mainThreadHandler = new Handler(Looper.getMainLooper()); private ErrorUtils() { } public static Snackbar showSnackbar(View view, @StringRes int errorMessage, Exception e, @StringRes int actionLabel, View.OnClickListener clickListener) { String error = (e == null) ? "" : e.getMessage(); boolean noConnection = NO_CONNECTION_ERROR.equals(error); boolean timeout = error.startsWith(NO_RESPONSE_TIMEOUT); if (noConnection || timeout) { return showSnackbar(view, R.string.no_internet_connection, actionLabel, clickListener); } else if (errorMessage == 0) { return showSnackbar(view, error, actionLabel, clickListener); } else if (error.equals("")) { return showSnackbar(view, errorMessage, CoreApp.getInstance().getString(R.string.no_internet_connection), actionLabel, clickListener); } else { return showSnackbar(view, errorMessage, error, actionLabel, clickListener); } } public static Snackbar showSnackbar(View view, @StringRes int errorMessage, String error, @StringRes int actionLabel, View.OnClickListener clickListener) { String errorMessageString = CoreApp.getInstance().getString(errorMessage); String message = String.format("%s: %s", errorMessageString, error); return showSnackbar(view, message, actionLabel, clickListener); } public static Snackbar showSnackbar(View view, @StringRes int message, @StringRes int actionLabel, View.OnClickListener clickListener) { Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_INDEFINITE); snackbar.setAction(actionLabel, clickListener); snackbar.show(); return snackbar; } private static Snackbar showSnackbar(View view, String message, @StringRes int actionLabel, View.OnClickListener clickListener) { Snackbar snackbar = Snackbar.make(view, message.trim(), Snackbar.LENGTH_INDEFINITE); if (clickListener != null) { snackbar.setAction(actionLabel, clickListener); } snackbar.show(); return snackbar; } public static void showErrorToast(QBResponseException exception) { Toaster.shortToast(String.format("[ERROR] Request has been completed with errors: %s", exception.getErrors() + ", code: " + exception.getHttpStatusCode())); } public static void showErrorDialog(Context context, @StringRes int errorMessage, String error) { showErrorDialog(context, context.getString(errorMessage), error); } public static void showErrorDialog(Context context, @StringRes int errorMessage, List<String> errors) { showErrorDialog(context, context.getString(errorMessage), errors.toString()); } private static void showErrorDialog(Context context, String errorMessage, String error) { showErrorDialog(context, String.format("%s: %s", errorMessage, error)); } private static void showErrorDialog(final Context context, final String errorMessage) { mainThreadHandler.post(new Runnable() { @Override public void run() { new AlertDialog.Builder(context) .setTitle(R.string.dlg_error) .setMessage(errorMessage) .create() .show(); } }); } }