package com.arcao.trackables.ui;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import com.afollestad.materialdialogs.MaterialDialog;
import com.arcao.trackables.R;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.Builder;
public class ErrorActivity extends AppCompatActivity {
private static final String PARAM_RESOURCE_TITLE = "RESOURCE_TITLE";
private static final String PARAM_RESOURCE_TEXT = "RESOURCE_TEXT";
private static final String PARAM_ADDITIONAL_MESSAGE = "ADDITIONAL_MESSAGE";
private static final String PARAM_INTENT = "INTENT";
@Override
protected void onPostResume() {
super.onPostResume();
showErrorDialog();
}
private void showErrorDialog () {
final int resTitleId = getIntent().getIntExtra(PARAM_RESOURCE_TITLE, 0);
final int resTextId = getIntent().getIntExtra(PARAM_RESOURCE_TEXT, 0);
final String additionalMessage = getIntent().getStringExtra(PARAM_ADDITIONAL_MESSAGE);
final Intent intent = getIntent().getParcelableExtra(PARAM_INTENT);
if (getFragmentManager().findFragmentByTag(ErrorDialogFragment.FRAGMENT_TAG) != null)
return;
ErrorDialogFragment.newInstance(resTitleId, resTextId, additionalMessage, intent)
.show(getFragmentManager(), ErrorDialogFragment.FRAGMENT_TAG);
}
public static class ErrorDialogFragment extends DialogFragment {
public static final String FRAGMENT_TAG = ErrorDialogFragment.class.getName();
public static DialogFragment newInstance(int resTitleId, int resTextId, String additionalMessage, Intent intent) {
ErrorDialogFragment fragment = new ErrorDialogFragment();
fragment.setCancelable(false);
Bundle args = new Bundle();
args.putInt(PARAM_RESOURCE_TITLE, resTitleId == 0 ? R.string.error_title : resTitleId);
args.putInt(PARAM_RESOURCE_TEXT, resTextId);
args.putString(PARAM_ADDITIONAL_MESSAGE, additionalMessage);
args.putParcelable(PARAM_INTENT, intent);
fragment.setArguments(args);
return fragment;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final int resTitleId = getArguments().getInt(PARAM_RESOURCE_TITLE);
final int resTextId = getArguments().getInt(PARAM_RESOURCE_TEXT);
final String additionalMessage = getArguments().getString(PARAM_ADDITIONAL_MESSAGE);
final Intent intent = getArguments().getParcelable(PARAM_INTENT);
MaterialDialog.Builder builder = new MaterialDialog.Builder(getActivity())
.title(resTitleId)
.positiveText(R.string.button_ok);
if (resTextId != 0) {
builder.content(getString(resTextId, StringUtils.defaultString(additionalMessage)));
} else {
builder.content(StringUtils.defaultString(additionalMessage));
}
builder.callback(new MaterialDialog.ButtonCallback() {
@Override
public void onPositive(MaterialDialog dialog) {
if (intent != null) {
getActivity().startActivity(intent);
}
getActivity().finish();
}
});
return builder.build();
}
}
public static final class IntentBuilder implements Builder<Intent> {
private final Context mContext;
private int mTitle = 0;
private int mText = 0;
private String mAdditionalMessage;
private Intent mIntent;
public IntentBuilder(Context context) {
mContext = context;
}
public IntentBuilder withTitle(int title) {
mTitle = title;
return this;
}
public IntentBuilder withText(int text) {
mText = text;
return this;
}
public IntentBuilder withAdditionalMessage(String additionalMessage) {
mAdditionalMessage = additionalMessage;
return this;
}
public IntentBuilder withIntent(Intent intent) {
mIntent = intent;
return this;
}
public Intent build() {
return new Intent(mContext, ErrorActivity.class)
.putExtra(ErrorActivity.PARAM_RESOURCE_TITLE, mTitle)
.putExtra(ErrorActivity.PARAM_RESOURCE_TEXT, mText)
.putExtra(ErrorActivity.PARAM_ADDITIONAL_MESSAGE, mAdditionalMessage)
.putExtra(ErrorActivity.PARAM_INTENT, mIntent);
}
}
}