package com.ichi2.anki.dialogs;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.ichi2.anki.R;
public class ExportDialog extends DialogFragment {
public interface ExportDialogListener {
void exportApkg(String path, Long did, boolean includeSched, boolean includeMedia);
void dismissAllDialogFragments();
}
private final int INCLUDE_SCHED = 0;
private final int INCLUDE_MEDIA = 1;
private boolean mIncludeSched = false;
private boolean mIncludeMedia = false;
/**
* A set of dialogs which deal with importing a file
*
* @param did An integer which specifies which of the sub-dialogs to show
* @param dialogMessage An optional string which can be used to show a custom message or specify import path
*/
public static ExportDialog newInstance(@NonNull String dialogMessage, Long did) {
ExportDialog f = new ExportDialog();
Bundle args = new Bundle();
args.putLong("did", did);
args.putString("dialogMessage", dialogMessage);
f.setArguments(args);
return f;
}
public static ExportDialog newInstance(@NonNull String dialogMessage) {
ExportDialog f = new ExportDialog();
Bundle args = new Bundle();
args.putString("dialogMessage", dialogMessage);
f.setArguments(args);
return f;
}
@Override
public MaterialDialog onCreateDialog(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Resources res = getResources();
final Long did = getArguments().getLong("did", -1L);
Integer[] checked;
if (did != -1L) {
mIncludeSched = false;
checked = new Integer[]{};
} else {
mIncludeSched = true;
checked = new Integer[]{ INCLUDE_SCHED };
}
final String[] items = { res.getString(R.string.export_include_schedule),
res.getString(R.string.export_include_media) };
MaterialDialog.Builder builder = new MaterialDialog.Builder(getActivity())
.title(R.string.export)
.content(getArguments().getString("dialogMessage"))
.positiveText(android.R.string.ok)
.negativeText(android.R.string.cancel)
.cancelable(true)
.items(items)
.alwaysCallMultiChoiceCallback()
.itemsCallbackMultiChoice(checked,
new MaterialDialog.ListCallbackMultiChoice() {
@Override
public boolean onSelection(MaterialDialog materialDialog,
Integer[] integers, CharSequence[] charSequences) {
mIncludeMedia = false;
mIncludeSched = false;
for (Integer integer : integers) {
switch (integer) {
case INCLUDE_SCHED:
mIncludeSched = true;
break;
case INCLUDE_MEDIA:
mIncludeMedia = true;
break;
}
}
return true;
}
})
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
((ExportDialogListener) getActivity())
.exportApkg(null, did != -1L ? did : null, mIncludeSched, mIncludeMedia);
dismissAllDialogFragments();
}
})
.onNegative(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
dismissAllDialogFragments();
}
});
return builder.show();
}
public void dismissAllDialogFragments() {
((ExportDialogListener) getActivity()).dismissAllDialogFragments();
}
}