package com.ericliudeveloper.sharedbillhelper.ui.presenter; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import com.ericliudeveloper.sharedbillhelper.R; import com.ericliudeveloper.sharedbillhelper.model.Bill; import com.ericliudeveloper.sharedbillhelper.model.BillDAO; import com.ericliudeveloper.sharedbillhelper.ui.dialog.DatePickerFragment; import com.ericliudeveloper.sharedbillhelper.ui.dialog.DateWrongDialog; import com.ericliudeveloper.sharedbillhelper.util.CustomEvents; import com.ericliudeveloper.sharedbillhelper.util.MyDateUtils; import de.greenrobot.event.EventBus; /** * Created by liu on 8/06/15. */ public class EditBillPresenter extends BasePresenter{ private static final String DATE_WRONG = "date_wrong"; Activity mActivity; Bill mBill; EditBillFace mCallback; private static final int ACTION_SELECT_START_DATE = 1; private static final int ACTION_SELECT_END_DATE = 2; private static final int ACTION_SELECT_DUE_DATE = 3; private int selectActionType = -1; public EditBillPresenter(EditBillFace callback) { mCallback = callback; mBill = new Bill(); } public void setActivity(Activity activity) { mActivity = activity; } public void onEvent(CustomEvents.EventEditBill eventEditBill) { if (eventEditBill.bill == null) { return; } mBill = eventEditBill.bill; refreshDisplayFromBillInstance(); EventBus.getDefault().removeStickyEvent(eventEditBill); } public void onEvent(CustomEvents.EventDatePicked event) { if (event.date == null) { return; } String pickedDate = MyDateUtils.getStringFromDate(event.date); switch (selectActionType) { case ACTION_SELECT_START_DATE: mBill.setStartDate(pickedDate); mCallback.showPickedStartDate(pickedDate); break; case ACTION_SELECT_END_DATE: mBill.setEndDate(pickedDate); mCallback.showPickedEndDate(pickedDate); break; case ACTION_SELECT_DUE_DATE: mBill.setDueDate(pickedDate); mCallback.showPickedDueDate(pickedDate); break; default: break; } checkIfStartDateAfterEndDate(); } public void onEvent(CustomEvents.EventWrongDatePicked eventWrongDatePicked) { showDatePickDialog(); } private void checkIfStartDateAfterEndDate() { String start = mBill.getStartDate(); String end = mBill.getEndDate(); if (!TextUtils.isEmpty(start) && !TextUtils.isEmpty(end)) { if (MyDateUtils.compareDates(start, end) < 0) { Bundle args = new Bundle(); args.putString(DateWrongDialog.TITLE, mActivity.getResources().getString(R.string.date_picking_mistake)); args.putString(DateWrongDialog.MESSAGE, mActivity.getResources().getString(R.string.start_date_must_be_before_end_date)); DateWrongDialog dateWrongdialog = DateWrongDialog.newInstance(args); dateWrongdialog.show(mActivity.getFragmentManager(), DATE_WRONG); } } } public void onStartDateButtonClicked() { selectActionType = ACTION_SELECT_START_DATE; showDatePickDialog(); } public void enEndDateButtonClicked() { selectActionType = ACTION_SELECT_END_DATE; showDatePickDialog(); } public void onDueDateButtonClicked() { selectActionType = ACTION_SELECT_DUE_DATE; showDatePickDialog(); } private void showDatePickDialog() { new DatePickerFragment().show(mActivity.getFragmentManager(), "date_picker"); } public void startActionDone() { if ( TextUtils.isEmpty(mBill.getStartDate()) || TextUtils.isEmpty(mBill.getEndDate())) { mCallback.showErrorDialog(); return; } String type = mCallback.getBillTypeInput(); if (!TextUtils.isEmpty(type)) { mBill.setType(type); } double amount = TextUtils.isEmpty(mCallback.getAmountInput()) ? 0d : Double.valueOf(mCallback.getAmountInput()); mBill.setAmount(amount); int isPaid = mCallback.getIsPaidInput() ? 1 : 0; mBill.setPaid(isPaid); saveBillInstanceToDB(mBill); if (mActivity != null) { mActivity.finish(); // Never do this!!! } } private void saveBillInstanceToDB(Bill bill) { BillDAO.saveBill(bill, null); } public void startActionCancel() { if (mActivity != null) { mActivity.finish(); // Never do this!!! } } public void refreshDisplayFromBillInstance() { String type = mBill.getType(); if (!TextUtils.isEmpty(type)) { mCallback.showBillType(type); } String amount = String.valueOf(mBill.getAmount()); if (!TextUtils.isEmpty(amount)) { mCallback.showAmount(amount); } String start = mBill.getStartDate(); if (!TextUtils.isEmpty(start)) { mCallback.showPickedStartDate(start); } String end = mBill.getEndDate(); if (!TextUtils.isEmpty(end)) { mCallback.showPickedEndDate(end); } String due = mBill.getDueDate(); if (!TextUtils.isEmpty(due)) { mCallback.showPickedDueDate(due); } boolean isPaid = mBill.getPaid() > 0; mCallback.showIsPaid(isPaid); } public interface EditBillFace { void showBillType(String type); void showAmount(String amount); void showPickedStartDate(String pickedDate); void showPickedEndDate(String pickedDate); void showPickedDueDate(String pickedDate); void showIsPaid(boolean isPaid); String getBillTypeInput(); String getAmountInput(); boolean getIsPaidInput(); void showErrorDialog(); } }