package com.stxnext.management.android.ui.fragment; import java.util.Calendar; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TableRow; import com.actionbarsherlock.ActionBarSherlock; import com.doomonafireball.betterpickers.calendardatepicker.CalendarDatePickerDialog; import com.doomonafireball.betterpickers.calendardatepicker.CalendarDatePickerDialog.OnDateChangedListener; import com.doomonafireball.betterpickers.calendardatepicker.SimpleMonthAdapter.CalendarDay; import com.doomonafireball.betterpickers.radialtimepicker.RadialPickerLayout; import com.doomonafireball.betterpickers.radialtimepicker.RadialTimePickerDialog; import com.doomonafireball.betterpickers.radialtimepicker.RadialTimePickerDialog.OnTimeSetListener; import com.stxnext.management.android.R; import com.stxnext.management.android.dto.postmessage.AbstractMessage; import com.stxnext.management.android.dto.postmessage.LatenessMessage; import com.stxnext.management.android.dto.postmessage.LatenessPayload; import com.stxnext.management.android.storage.prefs.StoragePrefs; import com.stxnext.management.android.ui.dependencies.TimeUtil; import com.stxnext.management.android.ui.dependencies.TouchResistantEditText; import com.stxnext.management.android.web.api.IntranetApi; public class LatenessFormFragment extends Fragment { private static final String DATE_PICKER_TAG = "datePicker"; private static final String START_TIME_PICKER_TAG = "startTimePicker"; private static final String END_TIME_PICKER_TAG = "endTimePicker"; private final static int initial_start_hour = 9; private final static int initial_minute = 0; private final static int initial_end_hour = 17; private TableRow dateRow; private TableRow startTimeRow; private TableRow endTimeRow; private TableRow workFromHomeRow; private EditText oooExplanationView; private TouchResistantEditText oooDateView; private TouchResistantEditText startTimeView; private TouchResistantEditText endTimeView; private ImageView workFromHomeCheck; private Button oooSubmitButton; private View view; Calendar submitDate = Calendar.getInstance(); Calendar startTime = Calendar.getInstance(); Calendar endTime = Calendar.getInstance(); CalendarDatePickerDialog datePickerDialog; RadialTimePickerDialog startTimePicker; RadialTimePickerDialog endTimePicker; StoragePrefs prefs; IntranetApi api; ActionBarSherlock sherlock; Integer daysLeft; FormActionReceiver formReceiver; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setRetainInstance(true); prefs = StoragePrefs.getInstance(getActivity()); api = IntranetApi.getInstance(getActivity().getApplication()); formReceiver = (FormActionReceiver) getActivity(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_outofoffice, container, false); dateRow = (TableRow) view.findViewById(R.id.dateRow); startTimeRow = (TableRow) view.findViewById(R.id.startTimeRow); endTimeRow = (TableRow) view.findViewById(R.id.endTimeRow); workFromHomeRow = (TableRow) view.findViewById(R.id.workFromHomeRow); oooExplanationView = (EditText) view.findViewById(R.id.oooExplanationView); oooDateView = (TouchResistantEditText) view.findViewById(R.id.oooDateView); startTimeView = (TouchResistantEditText) view.findViewById(R.id.startTimeView); endTimeView = (TouchResistantEditText) view.findViewById(R.id.endTimeView); workFromHomeCheck = (ImageView) view.findViewById(R.id.workFromHomeCheck); oooSubmitButton = (Button) view.findViewById(R.id.oooSubmitButton); setupTimeAndPickers(); oooDateView.setText(TimeUtil.defaultDateFormat.format(submitDate.getTime())); setWorkFromHomeSelected(false); setActions(); return view; } private void setupTimeAndPickers(){ datePickerDialog = CalendarDatePickerDialog .newInstance(null, submitDate.get(Calendar.YEAR), submitDate.get(Calendar.MONTH), submitDate.get(Calendar.DAY_OF_MONTH)); startTime.set(Calendar.HOUR_OF_DAY, initial_start_hour); startTime.set(Calendar.MINUTE, initial_minute); endTime.set(Calendar.HOUR_OF_DAY, initial_end_hour); endTime.set(Calendar.MINUTE, initial_minute); startTimePicker = RadialTimePickerDialog .newInstance(null,initial_start_hour, initial_minute, true); endTimePicker = RadialTimePickerDialog .newInstance(null, initial_end_hour, initial_minute, true); startTimeView.setText(TimeUtil.updateCalendarTimeAndGetFormat(startTime, initial_start_hour, initial_minute)); endTimeView.setText(TimeUtil.updateCalendarTimeAndGetFormat(endTime, initial_end_hour, initial_minute)); startTimePicker.setOnTimeSetListener(new OnTimeSetListener() { @Override public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) { startTimeView.setText(TimeUtil.updateCalendarTimeAndGetFormat(startTime, hourOfDay, minute)); } }); endTimePicker.setOnTimeSetListener(new OnTimeSetListener() { @Override public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) { endTimeView.setText(TimeUtil.updateCalendarTimeAndGetFormat(endTime, hourOfDay, minute)); } }); datePickerDialog.registerOnDateChangedListener(new OnDateChangedListener() { @Override public void onDateChanged() { CalendarDay day = datePickerDialog.getSelectedDay(); oooDateView.setText(TimeUtil.updateCalendarAndGetFormat(submitDate, day.getYear(), day.getMonth(), day.getDay())); datePickerDialog.dismiss(); } }); } private void setActions(){ dateRow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentManager fm = getActivity().getSupportFragmentManager(); datePickerDialog.show(fm,DATE_PICKER_TAG); } }); startTimeRow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentManager fm = getActivity().getSupportFragmentManager(); startTimePicker.setStartTime(startTime.get(Calendar.HOUR_OF_DAY), startTime.get(Calendar.MINUTE)); startTimePicker.show(fm, START_TIME_PICKER_TAG); } }); endTimeRow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentManager fm = getActivity().getSupportFragmentManager(); endTimePicker.setStartTime(endTime.get(Calendar.HOUR_OF_DAY), endTime.get(Calendar.MINUTE)); endTimePicker.show(fm, END_TIME_PICKER_TAG); } }); workFromHomeRow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setWorkFromHomeSelected(!(Boolean) workFromHomeCheck.getTag()); } }); oooSubmitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(validateForm()){ LatenessMessage message = new LatenessMessage(); message.setSubmissionDate(submitDate.getTime()); message.setStartHour(startTime.getTime()); message.setEndHour(endTime.getTime()); message.setExplanation(oooExplanationView.getText().toString().trim()); message.setWorkFromHome((Boolean) workFromHomeCheck.getTag()); formReceiver.onSubmitFormWithMessage(new LatenessPayload(message)); } } }); } private boolean validateForm(){ if(startTime.after(endTime)){ startTimeView.setError(getString(R.string.validation_start_time_after_end_time)); startTimeView.requestFocus(); return false; } startTimeView.setError(null); return true; } //should prepare checkbox control private void setWorkFromHomeSelected(boolean selected){ workFromHomeCheck.setTag(selected); workFromHomeCheck.setImageLevel(selected?1:0); } public void setFormEnabled(boolean enabled){ dateRow.setEnabled(enabled); startTimeRow.setEnabled(enabled); endTimeRow.setEnabled(enabled); workFromHomeRow.setEnabled(enabled); oooSubmitButton.setEnabled(enabled); } public void setSherlock(ActionBarSherlock sherlock) { this.sherlock = sherlock; } }