DateTimeDialogFragment.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. package de.tudarmstadt.informatik.hostage.ui2.dialog;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. import java.util.Locale;
  6. import de.tudarmstadt.informatik.hostage.R;
  7. import de.tudarmstadt.informatik.hostage.ui2.activity.MainActivity;
  8. import de.tudarmstadt.informatik.hostage.ui2.dialog.ChecklistDialog.ChecklistDialogListener;
  9. import android.annotation.SuppressLint;
  10. import android.app.Activity;
  11. import android.app.AlertDialog;
  12. import android.app.AlertDialog.Builder;
  13. import android.app.Dialog;
  14. import android.app.DialogFragment;
  15. import android.content.DialogInterface;
  16. import android.os.Bundle;
  17. import android.view.LayoutInflater;
  18. import android.view.View;
  19. import android.widget.DatePicker;
  20. import android.widget.DatePicker.OnDateChangedListener;
  21. import android.widget.TimePicker;
  22. import android.widget.TimePicker.OnTimeChangedListener;
  23. @SuppressLint("ValidFragment")
  24. public class DateTimeDialogFragment extends DialogFragment implements OnDateChangedListener, OnTimeChangedListener {
  25. // Define constants for date-time picker.
  26. public final static int DATE_PICKER = 1;
  27. public final static int TIME_PICKER = 2;
  28. public final static int DATE_TIME_PICKER = 3;
  29. // DatePicker reference
  30. public DatePicker datePicker;
  31. // TimePicker reference
  32. public TimePicker timePicker;
  33. // Calendar reference
  34. private Calendar mCalendar;
  35. // Define activity
  36. private Activity activity;
  37. // Define Dialog type
  38. private int DialogType;
  39. // Define Dialog view
  40. private View mView;
  41. // Constructor start
  42. public DateTimeDialogFragment(Activity activity) {
  43. this(activity, DATE_TIME_PICKER);
  44. }
  45. public DateTimeDialogFragment(Activity activity, int DialogType) {
  46. this.activity = activity;
  47. this.DialogType = DialogType;
  48. // Inflate layout for the view
  49. // Pass null as the parent view because its going in the dialog layout
  50. LayoutInflater inflater = activity.getLayoutInflater();
  51. mView = inflater.inflate(R.layout.date_time_dialog, null);
  52. // Grab a Calendar instance
  53. mCalendar = Calendar.getInstance();
  54. // Init date picker
  55. datePicker = (DatePicker) mView.findViewById(R.id.DatePicker);
  56. datePicker.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), this);
  57. // Init time picker
  58. timePicker = (TimePicker) mView.findViewById(R.id.TimePicker);
  59. // Set default Calendar and Time Style
  60. setIs24HourView(true);
  61. setCalendarViewShown(false);
  62. switch (DialogType) {
  63. case DATE_PICKER:
  64. timePicker.setVisibility(View.GONE);
  65. break;
  66. case TIME_PICKER:
  67. datePicker.setVisibility(View.GONE);
  68. break;
  69. }
  70. }
  71. public void setDate(long timeInMillis){
  72. Calendar calendar = Calendar.getInstance();
  73. calendar.setTimeInMillis (timeInMillis);
  74. int year = calendar.get(Calendar.YEAR) ;
  75. int month = calendar.get(Calendar.MONTH);
  76. int day = calendar.get(Calendar.DATE);
  77. int hour = calendar.get(Calendar.HOUR);
  78. int min = calendar.get(Calendar.MINUTE);
  79. datePicker.updateDate(year, month, day);
  80. timePicker.setCurrentHour(hour);
  81. timePicker.setCurrentMinute(min);
  82. }
  83. public long getDate(){
  84. int day = datePicker.getDayOfMonth();
  85. int month = datePicker.getMonth();
  86. int year = datePicker.getYear();
  87. int hourOfDay = timePicker.getCurrentHour();
  88. int minute = timePicker.getCurrentMinute();
  89. Calendar calendar = Calendar.getInstance();
  90. calendar.set(year, month, day, hourOfDay, minute);
  91. return calendar.getTime().getTime();
  92. }
  93. public interface DateTimeDialogFragmentListener {
  94. public void onDateTimePickerPositiveClick(DateTimeDialogFragment dialog);
  95. public void onDateTimePickerNegativeClick(DateTimeDialogFragment dialog);
  96. }
  97. private DateTimeDialogFragmentListener mListener;
  98. @Override
  99. public void onAttach(Activity activity) {
  100. super.onAttach(activity);
  101. try {
  102. if (activity.getClass().equals(MainActivity.class)){
  103. mListener = (DateTimeDialogFragmentListener) (((MainActivity)activity).getDisplayedFragment());
  104. } else {
  105. mListener = (DateTimeDialogFragmentListener) activity;
  106. }
  107. } catch (ClassCastException e) {
  108. throw new ClassCastException(activity.toString()
  109. + " must implement DateTimeDialogListener");
  110. }
  111. }
  112. @Override
  113. public Dialog onCreateDialog(Bundle savedInstanceState) {
  114. Builder builder = new AlertDialog.Builder(activity);
  115. builder.setView(mView);
  116. builder.setMessage("Set Date")
  117. .setPositiveButton("Set",
  118. new DialogInterface.OnClickListener() {
  119. public void onClick(DialogInterface dialog, int id) {
  120. mListener.onDateTimePickerPositiveClick(DateTimeDialogFragment.this);
  121. }
  122. })
  123. .setNegativeButton("Cancel",
  124. new DialogInterface.OnClickListener() {
  125. public void onClick(DialogInterface dialog, int id) {
  126. mListener.onDateTimePickerNegativeClick(DateTimeDialogFragment.this);
  127. DateTimeDialogFragment.this.getDialog().cancel();
  128. }
  129. });
  130. return builder.create();
  131. }
  132. @Override
  133. public void onActivityCreated(Bundle savedInstanceState) {
  134. super.onActivityCreated(savedInstanceState);
  135. timePicker.setOnTimeChangedListener(this);
  136. }
  137. public int get(final int field) {
  138. return mCalendar.get(field);
  139. }
  140. public long getDateTimeMillis() {
  141. return mCalendar.getTimeInMillis();
  142. }
  143. public void setIs24HourView(boolean is24HourView) {
  144. timePicker.setIs24HourView(is24HourView);
  145. }
  146. public boolean is24HourView() {
  147. return timePicker.is24HourView();
  148. }
  149. public void setCalendarViewShown(boolean calendarView) {
  150. datePicker.setCalendarViewShown(calendarView);
  151. }
  152. public boolean CalendarViewShown() {
  153. return datePicker.getCalendarViewShown();
  154. }
  155. public void updateDate(int year, int monthOfYear, int dayOfMonth) {
  156. datePicker.updateDate(year, monthOfYear, dayOfMonth);
  157. }
  158. public void updateTime(int currentHour, int currentMinute) {
  159. timePicker.setCurrentHour(currentHour);
  160. timePicker.setCurrentMinute(currentMinute);
  161. }
  162. public String getDateTime() {
  163. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
  164. return sdf.format(mCalendar.getTime());
  165. }
  166. public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
  167. mCalendar.set(year, monthOfYear, dayOfMonth, mCalendar.get(Calendar.HOUR_OF_DAY), mCalendar.get(Calendar.MINUTE));
  168. }
  169. public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
  170. mCalendar.set(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), hourOfDay, minute);
  171. }
  172. }