package yuku.alkitab.base.dialog; import android.app.Activity; import android.content.Intent; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.text.InputType; import android.text.TextUtils; import com.afollestad.materialdialogs.MaterialDialog; import yuku.alkitab.base.App; import yuku.alkitab.base.IsiActivity; import yuku.alkitab.base.S; import yuku.alkitab.base.widget.AttributeView; import yuku.alkitab.debug.R; import yuku.alkitab.model.ProgressMark; import java.util.Date; public class ProgressMarkRenameDialog extends DialogFragment { public static final String TAG = ProgressMarkRenameDialog.class.getSimpleName(); public interface Listener { void onOked(); void onDeleted(); } public static void show(final Activity activity, final ProgressMark progressMark, @NonNull final Listener listener) { final String caption = !TextUtils.isEmpty(progressMark.caption) ? progressMark.caption : activity.getString(AttributeView.getDefaultProgressMarkStringResource(progressMark.preset_id)); new MaterialDialog.Builder(activity) .positiveText(R.string.ok) .neutralText(R.string.delete) .inputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) .inputRange(0, 32) .input(activity.getString(R.string.pm_progress_name), caption, true, (dialog, text) -> { final String name = text.toString(); if (TextUtils.getTrimmedLength(name) == 0) { progressMark.caption = null; } else { progressMark.caption = name; } progressMark.modifyTime = new Date(); S.getDb().insertOrUpdateProgressMark(progressMark); // Since updating database is the responsibility here, // announcing it will also be here. App.getLbm().sendBroadcast(new Intent(IsiActivity.ACTION_ATTRIBUTE_MAP_CHANGED)); listener.onOked(); }) .onNeutral((dialog, which) -> new MaterialDialog.Builder(activity) .content(TextUtils.expandTemplate(activity.getText(R.string.pm_delete_progress_confirm), caption)) .positiveText(R.string.ok) .onPositive((_unused_, which1) -> { progressMark.ari = 0; progressMark.caption = null; progressMark.modifyTime = new Date(); S.getDb().insertOrUpdateProgressMark(progressMark); // Since updating database is the responsibility here, // announcing it will also be here. App.getLbm().sendBroadcast(new Intent(IsiActivity.ACTION_ATTRIBUTE_MAP_CHANGED)); listener.onDeleted(); }) .negativeText(R.string.cancel) .show()) .show(); } }