package org.solovyev.android.calculator.errors;
import android.app.Activity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import org.solovyev.android.Check;
import org.solovyev.android.calculator.*;
import javax.annotation.Nonnull;
import javax.inject.Inject;
public class FixableErrorFragment extends BaseDialogFragment {
static final String FRAGMENT_TAG = "fixable-error";
@Nonnull
private static final String ARG_ERROR = "error";
@Inject
UiPreferences uiPreferences;
private FixableError error;
@Nullable
private FixableErrorsActivity activity;
@Nonnull
private static FixableErrorFragment create(@Nonnull FixableError error) {
final FixableErrorFragment fragment = new FixableErrorFragment();
final Bundle args = new Bundle(1);
args.putParcelable(ARG_ERROR, error);
fragment.setArguments(args);
return fragment;
}
public static void show(@Nonnull FixableError error, @Nonnull FragmentManager fm) {
App.showDialog(create(error), FRAGMENT_TAG, fm);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.activity = (FixableErrorsActivity) activity;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
error = getArguments().getParcelable(ARG_ERROR);
Check.isNotNull(error);
}
@Override
protected void inject(@NonNull AppComponent component) {
super.inject(component);
component.inject(this);
}
@Override
protected void onPrepareDialog(@NonNull AlertDialog.Builder builder) {
builder.setMessage(error.message);
builder.setNeutralButton(R.string.cpp_dont_show_again, null);
builder.setNegativeButton(R.string.close, null);
if (error.error != null) {
builder.setPositiveButton(R.string.fix, null);
}
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_NEUTRAL:
uiPreferences.setShowFixableErrorDialog(false);
dismiss();
break;
case DialogInterface.BUTTON_POSITIVE:
assert error.error != null;
error.error.fix(preferences);
dismiss();
break;
default:
super.onClick(dialog, which);
break;
}
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (activity != null) {
activity.onDialogClosed();
activity = null;
}
}
}