package com.pedrocarrillo.expensetracker.ui.reminders; import android.app.Activity; import android.app.TimePickerDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.TextView; import android.widget.TimePicker; import com.pedrocarrillo.expensetracker.R; import com.pedrocarrillo.expensetracker.entities.Reminder; import com.pedrocarrillo.expensetracker.interfaces.IUserActionsMode; import com.pedrocarrillo.expensetracker.ui.BaseFragment; import com.pedrocarrillo.expensetracker.utils.DialogManager; import com.pedrocarrillo.expensetracker.utils.RealmManager; import com.pedrocarrillo.expensetracker.utils.Util; import java.util.Calendar; import java.util.Date; /** * Created by Pedro on 9/26/2015. */ public class NewReminderFragment extends BaseFragment implements View.OnClickListener{ public static final String REMINDER_ID_KEY = "_reminder_id"; private TextView tvDay; private TextView tvTime; private EditText etName; private int daySelected; private Date timeSelected; private Reminder mReminder; private @IUserActionsMode int mUserActionMode; static NewReminderFragment newInstance(@IUserActionsMode int mode, String reminderId) { NewReminderFragment newReminderFragment = new NewReminderFragment(); Bundle bundle = new Bundle(); bundle.putInt(IUserActionsMode.MODE_TAG, mode); if (reminderId != null) bundle.putString(REMINDER_ID_KEY, reminderId); newReminderFragment.setArguments(bundle); return newReminderFragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = onCreateFragmentView(R.layout.fragment_dialog_new_reminder, inflater, container, true); tvDay = (TextView) rootView.findViewById(R.id.tv_day); tvTime = (TextView) rootView.findViewById(R.id.tv_time); etName = (EditText) rootView.findViewById(R.id.et_name); return rootView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); if (getArguments() != null) { mUserActionMode = getArguments().getInt(IUserActionsMode.MODE_TAG) == IUserActionsMode.MODE_CREATE ? IUserActionsMode.MODE_CREATE : IUserActionsMode.MODE_UPDATE; } setMode(); tvDay.setOnClickListener(this); tvTime.setOnClickListener(this); } private void setMode() { if (IUserActionsMode.MODE_CREATE == mUserActionMode) { setTitle(getString(R.string.create_a_reminder)); daySelected = 1; timeSelected = new Date(); } else { setTitle(getString(R.string.edit_a_reminder)); String reminderId = getArguments().getString(REMINDER_ID_KEY); mReminder = (Reminder) RealmManager.getInstance().findById(Reminder.class, reminderId); daySelected = mReminder.getDay(); timeSelected = mReminder.getDate(); etName.setText(mReminder.getName()); } updateData(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_reminder, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_save) { onSaveReminder(); } return super.onOptionsItemSelected(item); } private void onSaveReminder() { if (!Util.isEmptyField(etName)) { if (mUserActionMode == IUserActionsMode.MODE_CREATE) { Reminder.saveNewReminder(etName.getText().toString(), daySelected, true, timeSelected); } else { Reminder updateReminder = new Reminder(etName.getText().toString(), daySelected, mReminder.isState(), timeSelected); updateReminder.setId(mReminder.getId()); updateReminder.setCreatedAt(mReminder.getCreatedAt()); Reminder.updateReminder(updateReminder, mReminder.isState()); } mFragmentListener.setResultWithData(Activity.RESULT_OK, new Intent()); } else { DialogManager.getInstance().showShortSnackBar(getView(), getString(R.string.reminder_name_validation)); } } @Override public void onClick(View v) { if (v.getId() == R.id.tv_day) { DialogManager.getInstance().createSinglePickDialog(getActivity(), getString(R.string.pick_day_of_month), R.array.reminder_days_available, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String[] daysArray = getResources().getStringArray(R.array.reminder_days_available); daySelected = Integer.valueOf(daysArray[which]); tvDay.setText(String.valueOf(daySelected)); } }); } else if (v.getId() == R.id.tv_time) { Calendar c = Calendar.getInstance(); c.setTime(timeSelected); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); DialogManager.getInstance().createTimePickerDialog(getActivity(), hour, minute ,new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); calendar.set(Calendar.MINUTE, minute); timeSelected = calendar.getTime(); updateData(); } }); } } private void updateData() { Calendar time = Calendar.getInstance(); time.setTime(timeSelected); tvDay.setText(String.valueOf(daySelected)); tvTime.setText(getString(R.string.hour_format, time.get(Calendar.HOUR_OF_DAY), time.get(Calendar.MINUTE))); } }