package com.jdroid.android.exception; import android.app.Activity; import android.support.v4.app.FragmentActivity; import com.jdroid.android.application.AbstractApplication; import com.jdroid.java.exception.AbstractException; public class DialogErrorDisplayer extends AbstractErrorDisplayer { private static final String GO_BACK_KEY = "goBack"; private static final String ERROR_DIALOG_STRATEGY_KEY = "errorDialogStrategy"; private Boolean goBackOnErrorByDefault; public DialogErrorDisplayer() { this(true); } public DialogErrorDisplayer(Boolean goBackOnErrorByDefault) { this.goBackOnErrorByDefault = goBackOnErrorByDefault; } @Override public void onDisplayError(String title, String description, Throwable throwable) { Activity activity = AbstractApplication.get().getCurrentActivity(); if (activity != null) { ErrorDialogFragment.show((FragmentActivity)activity, title, description, getErrorDialogStrategy(throwable)); } } private ErrorDialogStrategy getErrorDialogStrategy(Throwable throwable) { if (throwable instanceof AbstractException) { AbstractException abstractException = (AbstractException)throwable; return abstractException.hasParameter(ERROR_DIALOG_STRATEGY_KEY) ? abstractException.<ErrorDialogStrategy>getParameter(ERROR_DIALOG_STRATEGY_KEY) : getDefaultErrorDialogStrategy(abstractException); } return getDefaultErrorDialogStrategy(throwable); } private DefaultErrorDialogStrategy getDefaultErrorDialogStrategy(Throwable throwable) { DefaultErrorDialogStrategy defaultStrategy = new DefaultErrorDialogStrategy(); if (throwable instanceof AbstractException) { AbstractException abstractException = (AbstractException)throwable; defaultStrategy.setGoBackOnError(abstractException.hasParameter(GO_BACK_KEY) ? abstractException.<Boolean>getParameter(GO_BACK_KEY) : goBackOnErrorByDefault(abstractException)); } else { defaultStrategy.setGoBackOnError(goBackOnErrorByDefault(throwable)); } return defaultStrategy; } public static void setErrorDialogStrategy(AbstractException abstractException, ErrorDialogStrategy strategy) { abstractException.addParameter(ERROR_DIALOG_STRATEGY_KEY, strategy); } protected Boolean goBackOnErrorByDefault(Throwable throwable) { return goBackOnErrorByDefault; } public static void markAsGoBackOnError(AbstractException abstractException) { abstractException.addParameter(GO_BACK_KEY, true); } public static void markAsNotGoBackOnError(AbstractException abstractException) { abstractException.addParameter(GO_BACK_KEY, false); } }