TimePreference.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package nl.digitalthings.mebarista;
  2. import android.content.Context;
  3. import android.preference.DialogPreference;
  4. import android.util.AttributeSet;
  5. import android.view.View;
  6. import android.widget.TimePicker;
  7. import android.content.res.TypedArray;
  8. import android.text.format.DateFormat;
  9. import java.util.Calendar;
  10. import java.util.Date;
  11. import java.util.GregorianCalendar;
  12. public class TimePreference extends DialogPreference {
  13. private Calendar calendar;
  14. private TimePicker picker = null;
  15. public TimePreference(Context ctxt) {
  16. this(ctxt, null);
  17. }
  18. public TimePreference(Context ctxt, AttributeSet attrs) {
  19. this(ctxt, attrs, 0);
  20. }
  21. public TimePreference(Context ctxt, AttributeSet attrs, int defStyle) {
  22. super(ctxt, attrs, defStyle);
  23. setPositiveButtonText( "Set" );
  24. setNegativeButtonText("Cancel");
  25. calendar = Calendar.getInstance(); // new GregorianCalendar();
  26. }
  27. @Override
  28. protected View onCreateDialogView() {
  29. picker = new TimePicker(getContext());
  30. return (picker);
  31. }
  32. @Override
  33. protected void onBindDialogView(View v) {
  34. super.onBindDialogView(v);
  35. picker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
  36. picker.setCurrentMinute(calendar.get(Calendar.MINUTE));
  37. }
  38. @Override
  39. protected void onDialogClosed(boolean positiveResult) {
  40. super.onDialogClosed(positiveResult);
  41. if (positiveResult) {
  42. System.out.println( "Selected HOUR " + picker.getCurrentHour() );
  43. calendar.set(Calendar.HOUR_OF_DAY, picker.getCurrentHour());
  44. calendar.set(Calendar.MINUTE, picker.getCurrentMinute());
  45. setSummary(getSummary());
  46. if (callChangeListener(calendar.getTimeInMillis())) {
  47. System.out.println( "dialog closed: ");
  48. Calendar fromMidnight; // = Calendar.getInstance();
  49. //fromMidnight.setTimeInMillis(calendar.getTimeInMillis());
  50. fromMidnight = (Calendar)calendar.clone();
  51. // calendar.setTimeZone( fromMidnight.getTimeZone() );
  52. fromMidnight.set(Calendar.HOUR_OF_DAY, 0);
  53. fromMidnight.set(Calendar.MINUTE, 0);
  54. fromMidnight.set(Calendar.SECOND, 0);
  55. fromMidnight.set(Calendar.MILLISECOND, 0);
  56. calendar.set( Calendar.SECOND, 0);
  57. calendar.set( Calendar.MILLISECOND, 0);
  58. calendar.set( Calendar.DST_OFFSET, 0); // dat hoeft misschien niet
  59. // persistLong((calendar.getTimeInMillis() - fromMidnight.getTimeInMillis()) / 1000);
  60. // persist in seconds!
  61. int val_seconds = calendar.get( Calendar.HOUR_OF_DAY ) * 60 * 60 + calendar.get( Calendar.MINUTE ) * 60;
  62. persistInt(val_seconds);
  63. //persist
  64. notifyChanged();
  65. }
  66. }
  67. }
  68. @Override
  69. protected Object onGetDefaultValue(TypedArray a, int index) {
  70. return (a.getString(index));
  71. }
  72. @Override
  73. protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
  74. if (restoreValue) {
  75. if (false && defaultValue == null) {
  76. calendar.setTimeInMillis( getPersistedInt( 0/* System.currentTimeMillis() */ ) * 1000 );
  77. } else {
  78. //Long stored_seconds = Long.parseLong(getPersistedString((String) defaultValue));
  79. int stored_seconds = getPersistedInt(0);
  80. int hours = stored_seconds / 3600;
  81. calendar.set(Calendar.HOUR_OF_DAY, hours );
  82. calendar.set(Calendar.MINUTE, ( stored_seconds - hours*3600 ) / 60 );
  83. calendar.set(Calendar.SECOND, 0);
  84. calendar.set(Calendar.MILLISECOND, 0);
  85. //calendar.setTimeInMillis( calendar.getTimeInMillis() + stored_millis );
  86. }
  87. } else {
  88. if ( false && defaultValue == null) {
  89. calendar.setTimeInMillis( System.currentTimeMillis() );
  90. } else {
  91. //Long stored_seconds = Long.parseLong(getPersistedString((String) defaultValue));
  92. // Long stored_seconds = Long.parseLong(getPersistedString((String) defaultValue));
  93. // int stored_seconds = Integer.parseInt( getPersistedString( "0" ) );
  94. int stored_seconds = getPersistedInt(0);
  95. int hours = stored_seconds / 3600;
  96. calendar.set(Calendar.HOUR_OF_DAY, hours );
  97. calendar.set(Calendar.MINUTE, ( stored_seconds - hours*3600 ) / 60 );
  98. calendar.set(Calendar.SECOND, 0);
  99. calendar.set(Calendar.MILLISECOND, 0);
  100. // calendar.setTimeInMillis( Long.parseLong((String) defaultValue) * 1000 );
  101. }
  102. }
  103. setSummary(getSummary());
  104. }
  105. @Override
  106. public CharSequence getSummary() {
  107. if (calendar == null) {
  108. return null;
  109. }
  110. return DateFormat.getTimeFormat(getContext()).format(new Date(calendar.getTimeInMillis()));
  111. }
  112. }