package com.rak.letmeknow; import java.util.Calendar; import com.rak.letmeknow.R; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.DatePicker; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TimePicker; import android.widget.ViewSwitcher; import android.widget.DatePicker.OnDateChangedListener; import android.widget.TimePicker.OnTimeChangedListener; public class DateTimePicker extends RelativeLayout implements View.OnClickListener, OnDateChangedListener, OnTimeChangedListener { // DatePicker reference private DatePicker datePicker; // TimePicker reference private TimePicker timePicker; // ViewSwitcher reference private ViewSwitcher viewSwitcher; // Calendar reference private Calendar mCalendar; // Constructor start public DateTimePicker(Context context) { this(context, null); } public DateTimePicker(Context context, AttributeSet attrs) { this(context, attrs, 0); } public DateTimePicker(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // Get LayoutInflater instance final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); // Inflate myself inflater.inflate(R.layout.datetimepicker, this, true); // Inflate the date and time picker views final LinearLayout datePickerView = (LinearLayout) inflater.inflate(R.layout.datepicker, null); final LinearLayout timePickerView = (LinearLayout) inflater.inflate(R.layout.timepicker, null); // Grab a Calendar instance mCalendar = Calendar.getInstance(); // Grab the ViewSwitcher so we can attach our picker views to it viewSwitcher = (ViewSwitcher) this.findViewById(R.id.DateTimePickerVS); // Init date picker datePicker = (DatePicker) datePickerView.findViewById(R.id.DatePicker); datePicker.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), this); // Init time picker timePicker = (TimePicker) timePickerView.findViewById(R.id.TimePicker); timePicker.setOnTimeChangedListener(this); // Handle button clicks ((Button) findViewById(R.id.SwitchToTime)).setOnClickListener(this); // shows the time picker ((Button) findViewById(R.id.SwitchToDate)).setOnClickListener(this); // shows the date picker // Populate ViewSwitcher viewSwitcher.addView(datePickerView, 0); viewSwitcher.addView(timePickerView, 1); } // Constructor end // Called every time the user changes DatePicker values public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // Update the internal Calendar instance mCalendar.set(year, monthOfYear, dayOfMonth, mCalendar.get(Calendar.HOUR_OF_DAY), mCalendar.get(Calendar.MINUTE)); } // Called every time the user changes TimePicker values public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { // Update the internal Calendar instance mCalendar.set(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), hourOfDay, minute); } // Handle button clicks public void onClick(View v) { switch (v.getId()) { case R.id.SwitchToDate: v.setEnabled(false); findViewById(R.id.SwitchToTime).setEnabled(true); viewSwitcher.showPrevious(); break; case R.id.SwitchToTime: v.setEnabled(false); findViewById(R.id.SwitchToDate).setEnabled(true); viewSwitcher.showNext(); break; } } // Convenience wrapper for internal Calendar instance public int get(final int field) { return mCalendar.get(field); } // Reset DatePicker, TimePicker and internal Calendar instance public void reset() { final Calendar c = Calendar.getInstance(); updateDate(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); updateTime(c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE)); } // Convenience wrapper for internal Calendar instance public long getDateTimeMillis() { return mCalendar.getTimeInMillis(); } // Convenience wrapper for internal TimePicker instance public void setIs24HourView(boolean is24HourView) { timePicker.setIs24HourView(is24HourView); } // Convenience wrapper for internal TimePicker instance public boolean is24HourView() { return timePicker.is24HourView(); } // Convenience wrapper for internal DatePicker instance public void updateDate(int year, int monthOfYear, int dayOfMonth) { datePicker.updateDate(year, monthOfYear, dayOfMonth); } // Convenience wrapper for internal TimePicker instance public void updateTime(int currentHour, int currentMinute) { timePicker.setCurrentHour(currentHour); timePicker.setCurrentMinute(currentMinute); } }