package com.ericliudeveloper.sharedbillhelper.ui.presenter; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.text.TextUtils; import com.ericliudeveloper.sharedbillhelper.R; import com.ericliudeveloper.sharedbillhelper.model.Member; import com.ericliudeveloper.sharedbillhelper.model.MemberDAO; 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 com.ericliudeveloper.sharedbillhelper.util.PermissionsUtil; import de.greenrobot.event.EventBus; /** * Created by liu on 11/06/15. */ public class EditMemberPresenter extends BasePresenter { private static final int ACTION_SELECT_MOVE_IN_DATE = 10; private static final int ACTION_SELECT_MOVE_OUT_DATE = 11; private static final String DATE_WRONG = "wrong date"; private static final int REQUEST_PICK_CONTACT = 1; private Activity mActivity; private Member mMember; private EditMemberFace mCallback; private int selectDateType = -1; public EditMemberPresenter(EditMemberFace callback) { mCallback = callback; mMember = new Member(); } public void setActivity(Activity activity) { mActivity = activity; } public void refreshDisplayFromMemberInstance() { String firstName = mMember.getFirstName(); if (!TextUtils.isEmpty(firstName)) { mCallback.showMemberFirstName(firstName); } String lastName = mMember.getLastName(); if (!TextUtils.isEmpty(lastName)) { mCallback.showMemberLastName(lastName); } String phone = mMember.getPhone(); if (!TextUtils.isEmpty(phone)) { mCallback.showMemberPhoneNumber(phone); } String email = mMember.getEmail(); if (!TextUtils.isEmpty(email)) { mCallback.showMemberEmail(email); } String moveIn = mMember.getMoveInDate(); if (!TextUtils.isEmpty(moveIn)) { mCallback.showPickedMoveInDate(moveIn); } String moveOut = mMember.getMoveOutDate(); if (!TextUtils.isEmpty(moveOut)) { mCallback.showPickedMoveOutDate(moveOut); } } public void startActionDone() { String firstName = mCallback.getFirstNameInput(); if (!TextUtils.isEmpty(firstName)) { mMember.setFirstName(firstName); } else { mCallback.showErroDialog(); return; } String lastName = mCallback.getLastNameInput(); if (!TextUtils.isEmpty(lastName)) { mMember.setLastName(lastName); } String phone = mCallback.getPhoneNumberInput(); if (!TextUtils.isEmpty(phone)) { mMember.setPhone(phone); } String email = mCallback.getEmailInput(); if (!TextUtils.isEmpty(email)) { mMember.setEmail(email); } saveMemberInstanceToDB(mMember); mActivity.finish(); } public void startActionCancel() { mActivity.finish(); } public void startActionPickContact() { PermissionsUtil.checkReadContactsPermission(mActivity); } private void saveMemberInstanceToDB(Member mMember) { MemberDAO.saveMember(mMember, null); } private void showDatePickDialog() { new DatePickerFragment().show(mActivity.getFragmentManager(), "date_picker"); } public void onPickMoveInDateButtonClicked() { selectDateType = ACTION_SELECT_MOVE_IN_DATE; showDatePickDialog(); } public void onPickMoveOutDateButtonClicked() { selectDateType = ACTION_SELECT_MOVE_OUT_DATE; showDatePickDialog(); } public interface EditMemberFace { void showPickedMoveInDate(String pickedDate); void showPickedMoveOutDate(String pickedDate); void showMemberFirstName(String firstName); void showMemberLastName(String lastName); void showMemberPhoneNumber(String phone); void showMemberEmail(String email); String getFirstNameInput(); String getLastNameInput(); String getPhoneNumberInput(); String getEmailInput(); void showErroDialog(); } public void onEvent(CustomEvents.ReadContactPermissionGrantedEvent eventReadContactPermissionGranted) { Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts")); pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers mActivity.startActivityForResult(pickContactIntent, REQUEST_PICK_CONTACT); EventBus.getDefault().removeStickyEvent(eventReadContactPermissionGranted); } public void onEvent(CustomEvents.EventActionContactChosen eventActionContactChosen) { mCallback.showMemberFirstName(eventActionContactChosen.member.getFirstName()); mCallback.showMemberPhoneNumber(eventActionContactChosen.member.getPhone()); EventBus.getDefault().removeStickyEvent(eventActionContactChosen); } public void onEvent(CustomEvents.EventEditMember eventEditMember) { if (eventEditMember.member == null) { return; } mMember = eventEditMember.member; refreshDisplayFromMemberInstance(); EventBus.getDefault().removeStickyEvent(eventEditMember); } public void onEvent(CustomEvents.EventDatePicked eventDatePicked) { if (eventDatePicked.date == null) { return; } String pickedDate = MyDateUtils.getStringFromDate(eventDatePicked.date); switch (selectDateType) { case ACTION_SELECT_MOVE_IN_DATE: mMember.setMoveInDate(pickedDate); mCallback.showPickedMoveInDate(pickedDate); break; case ACTION_SELECT_MOVE_OUT_DATE: mMember.setMoveOutDate(pickedDate); mCallback.showPickedMoveOutDate(pickedDate); break; default: break; } MyDateUtils.checkStartDateAfterEndDateAndShowDialog(mMember.getMoveInDate(), mMember.getMoveOutDate(), mActivity); } public void onEvent(CustomEvents.EventWrongDatePicked eventWrongDatePicked) { showDatePickDialog(); } private void checkIfStartDateAfterEndDate() { String moveIn = mMember.getMoveInDate(); String moveOut = mMember.getMoveOutDate(); if (!TextUtils.isEmpty(moveIn) && !TextUtils.isEmpty(moveOut)) { if (MyDateUtils.compareDates(moveIn, moveOut) < 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); } } } }