package com.mobmonkey.mobmonkeyandroid; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import com.mobmonkey.mobmonkeyandroid.R; import com.mobmonkey.mobmonkeysdk.utils.MMSDKConstants; import kankan.wheel.widget.OnWheelChangedListener; import kankan.wheel.widget.WheelView; import kankan.wheel.widget.adapters.AbstractWheelTextAdapter; import kankan.wheel.widget.adapters.ArrayWheelAdapter; import kankan.wheel.widget.adapters.NumericWheelAdapter; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.TextView; import android.widget.Toast; import android.widget.ToggleButton; /** * @author Dezapp, LLC * */ public class ScheduleRequestScreen extends Activity implements OnWheelChangedListener, OnCheckedChangeListener { private static final String TAG = "ScheduleRequestScreen: "; private WheelView wvDay; private WheelView wvHours; private WheelView wvMins; private WheelView wvAMPM; private ToggleButton tbRepeating; private RadioGroup rgRepeating; private NumericWheelAdapter numericWheelAdapter; private Calendar requestCal; private Calendar currCal; private String repeatRate; /* * (non-Javadoc) * @see android.app.Activity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); overridePendingTransition(R.anim.slide_right_in, R.anim.slide_hold); setContentView(R.layout.schedule_request_screen); wvDay = (WheelView) findViewById(R.id.wheelday); wvHours = (WheelView) findViewById(R.id.wheelhour); wvMins = (WheelView) findViewById(R.id.wheelmins); wvAMPM = (WheelView) findViewById(R.id.wheelampm); tbRepeating = (ToggleButton) findViewById(R.id.tbrepeating); rgRepeating = (RadioGroup) findViewById(R.id.rgrepeating); rgRepeating.setOnCheckedChangeListener(ScheduleRequestScreen.this); requestCal = Calendar.getInstance(); currCal = Calendar.getInstance(); repeatRate = MMSDKConstants.REQUEST_REPEAT_RATE_DAILY; if(getIntent().getSerializableExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_TIME) != null) { requestCal = (Calendar) getIntent().getSerializableExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_TIME); } setRepeating(); wvDay.setViewAdapter(new DayArrayAdapter(ScheduleRequestScreen.this, currCal)); wvDay.setCurrentItem(MMSDKConstants.DAYS_PREVIOUS + requestCal.get(Calendar.DAY_OF_YEAR) - currCal.get(Calendar.DAY_OF_YEAR)); numericWheelAdapter = new NumericWheelAdapter(ScheduleRequestScreen.this, 1, 12, "%02d"); numericWheelAdapter.setItemResource(R.layout.wheel_text_item); numericWheelAdapter.setItemTextResource(R.id.text); wvHours.setViewAdapter(numericWheelAdapter); if(requestCal.get(Calendar.HOUR) == 0) { wvHours.setCurrentItem(11); } else { wvHours.setCurrentItem(requestCal.get(Calendar.HOUR) - 1); } wvHours.setCyclic(true); wvHours.addChangingListener(ScheduleRequestScreen.this); numericWheelAdapter = new NumericWheelAdapter(ScheduleRequestScreen.this, 0, 59, "%02d"); numericWheelAdapter.setItemResource(R.layout.wheel_text_item); numericWheelAdapter.setItemTextResource(R.id.text); wvMins.setViewAdapter(numericWheelAdapter); wvMins.setCurrentItem(requestCal.get(Calendar.MINUTE)); wvMins.setCyclic(true); wvMins.addChangingListener(ScheduleRequestScreen.this); ArrayWheelAdapter<String> ampmAdapter = new ArrayWheelAdapter<String>(this, new String[] {"AM", "PM"}); ampmAdapter.setItemResource(R.layout.wheel_text_item); ampmAdapter.setItemTextResource(R.id.text); wvAMPM.setViewAdapter(ampmAdapter); wvAMPM.setCurrentItem(requestCal.get(Calendar.AM_PM)); } /* * (non-Javadoc) * @see kankan.wheel.widget.OnWheelChangedListener#onChanged(kankan.wheel.widget.WheelView, int, int) */ /** * Changes the hours wheels if the mins wheel rollover from 59 to 0 and changes days/ampm wheel if hour roll over. */ // TODO: clean up mess of working code @Override public void onChanged(WheelView wheel, int oldValue, int newValue) { if(wheel == wvHours) { if(oldValue == 10 && newValue == 11) { if(wvAMPM.getCurrentItem() == 0) { wvAMPM.setCurrentItem(1); } else if(wvAMPM.getCurrentItem() == 1) { wvDay.setCurrentItem(wvDay.getCurrentItem() + 1); wvAMPM.setCurrentItem(0); } } else if(oldValue == 11 && newValue == 10) { if(wvAMPM.getCurrentItem() == 0) { wvDay.setCurrentItem(wvDay.getCurrentItem() - 1); wvAMPM.setCurrentItem(1); } else if(wvAMPM.getCurrentItem() == 1) { wvAMPM.setCurrentItem(0); } } } else if (wheel == wvMins) { if(oldValue == 59 && newValue == 0) { wvHours.setCurrentItem(wvHours.getCurrentItem() + 1); } else if(oldValue == 0 && newValue == 59) { wvHours.setCurrentItem(wvHours.getCurrentItem() - 1); } } } /* * (non-Javadoc) * @see android.widget.RadioGroup.OnCheckedChangeListener#onCheckedChanged(android.widget.RadioGroup, int) */ @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch(checkedId) { case R.id.rbdaily: repeatRate = MMSDKConstants.REQUEST_REPEAT_RATE_DAILY; break; case R.id.rbweekly: repeatRate = MMSDKConstants.REQUEST_REPEAT_RATE_WEEKLY; break; case R.id.rbmonthly: repeatRate = MMSDKConstants.REQUEST_REPEAT_RATE_MONTHLY; break; } } /* * (non-Javadoc) * @see android.app.Activity#onBackPressed() */ @Override public void onBackPressed() { setResult(RESULT_CANCELED); super.onBackPressed(); overridePendingTransition(R.anim.slide_hold, R.anim.slide_right_out); } public void viewOnClick(View view) { switch(view.getId()) { case R.id.btnsetschedule: getDateAndTime(); break; } } private void setRepeating() { tbRepeating.setChecked(getIntent().getBooleanExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_REPEATING, true)); rgRepeating.check(getCheckedRadioButton()); } private int getCheckedRadioButton() { repeatRate = getIntent().getStringExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_REPEATING_RATE); if(repeatRate.equals(MMSDKConstants.REQUEST_REPEAT_RATE_DAILY)) { return R.id.rbdaily; } else if(repeatRate.equals(MMSDKConstants.REQUEST_REPEAT_RATE_WEEKLY)) { return R.id.rbweekly; } else if(repeatRate.equals(MMSDKConstants.REQUEST_REPEAT_RATE_MONTHLY)) { return R.id.rbmonthly; } else { return R.id.rbdaily; } } private String getRepeating() { if(tbRepeating.isChecked()) { return repeatRate; } else { return MMSDKConstants.REQUEST_REPEAT_RATE_NONE; } } private void getDateAndTime() { Log.d(TAG, TAG + "day: " + (wvDay.getCurrentItem() - MMSDKConstants.DAYS_PREVIOUS)); Log.d(TAG, TAG + "hour: " + (wvHours.getCurrentItem() + 1)); Log.d(TAG, TAG + "mins: " + wvMins.getCurrentItem()); Log.d(TAG, TAG + "am/pm: " + wvAMPM.getCurrentItem()); int day = wvDay.getCurrentItem() - MMSDKConstants.DAYS_PREVIOUS - (requestCal.get(Calendar.DAY_OF_YEAR) - currCal.get(Calendar.DAY_OF_YEAR)); int hour = wvHours.getCurrentItem() + 1; int min = wvMins.getCurrentItem(); int ampm = wvAMPM.getCurrentItem(); requestCal.set(Calendar.HOUR, hour); requestCal.set(Calendar.MINUTE, min); if(hour == 12) { requestCal.add(Calendar.HOUR, 12); day -= 1; } if(ampm == 0) { requestCal.set(Calendar.AM_PM, Calendar.AM); } else if (ampm == 1) { requestCal.set(Calendar.AM_PM, Calendar.PM); } requestCal.add(Calendar.DAY_OF_YEAR, day); long reqTime = requestCal.getTimeInMillis()/60000 * 60000; long currTime = System.currentTimeMillis()/60000 * 60000; Log.d(TAG, TAG + "requestCal time: " + reqTime); Log.d(TAG, TAG + "current time: " + currTime); if(reqTime < currTime) { Toast.makeText(ScheduleRequestScreen.this, R.string.toast_current_or_past_current_time, Toast.LENGTH_LONG).show(); } else { Intent scheduleRequestIntent = new Intent(); scheduleRequestIntent.putExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_TIME, requestCal); scheduleRequestIntent.putExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_REPEATING, tbRepeating.isChecked()); scheduleRequestIntent.putExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_REPEATING_RATE, getRepeating()); setResult(RESULT_OK, scheduleRequestIntent); finish(); overridePendingTransition(R.anim.slide_hold, R.anim.slide_right_out); } } private class DayArrayAdapter extends AbstractWheelTextAdapter { private final int daysCount = 1000; Calendar calendar; protected DayArrayAdapter(Context context, Calendar calendar) { super(context, R.layout.time2_day, NO_RESOURCE); this.calendar = calendar; setItemTextResource(R.id.time2_monthday); } @Override public View getItem(int index, View convertView, ViewGroup parent) { int day = -MMSDKConstants.DAYS_PREVIOUS + index; Calendar newCalendar = (Calendar) calendar.clone(); newCalendar.roll(Calendar.DAY_OF_YEAR, day); View view = super.getItem(index, convertView, parent); TextView weekday = (TextView) view.findViewById(R.id.time2_weekday); TextView monthday = (TextView) view.findViewById(R.id.time2_monthday); if (day == 0) { weekday.setText(MMSDKConstants.DEFAULT_STRING_EMPTY); monthday.setText(R.string.tv_today); monthday.setTextColor(0xFF0000F0); } else { DateFormat dateFormat = new SimpleDateFormat("EEE"); weekday.setText(dateFormat.format(newCalendar.getTime())); dateFormat = new SimpleDateFormat("MMM d"); monthday.setText(dateFormat.format(newCalendar.getTime())); monthday.setTextColor(0xFF111111); } return view; } @Override public int getItemsCount() { return daysCount + 1; } @Override protected CharSequence getItemText(int index) { return MMSDKConstants.DEFAULT_STRING_EMPTY; } } }