package com.iwedia.gui.components.dialogs; import android.app.DatePickerDialog.OnDateSetListener; import android.app.TimePickerDialog.OnTimeSetListener; import android.content.Context; import android.content.res.TypedArray; import android.os.RemoteException; import android.util.Log; import android.view.View; import android.widget.DatePicker; import android.widget.TimePicker; import com.iwedia.dtv.pvr.TimerCreateParams; import com.iwedia.dtv.types.TimeDate; import com.iwedia.dtv.types.TimerRepeatMode; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVButton; import com.iwedia.gui.components.A4TVDatePicker; import com.iwedia.gui.components.A4TVDialog; import com.iwedia.gui.components.A4TVSpinner; import com.iwedia.gui.components.A4TVTimePicker; import com.iwedia.gui.components.A4TVToast; import com.iwedia.gui.mainmenu.DialogManager; import com.iwedia.gui.mainmenu.MainMenuContent; import com.iwedia.gui.util.DateTimeConversions; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; /** * PVR Manual Schedule Recording dialog * * @author Mladen Ilic */ public class PVRManualScheduleDialog extends A4TVDialog implements A4TVDialogInterface, android.view.View.OnClickListener { /** IDs for buttons */ public static final int TV_MENU_PVR_SCHEDULE_REMINDER_START = 900, TV_MENU_PVR_SCHEDULE_REMINDER_DATE = 901, TV_MENU_PVR_SCHEDULE_REMINDER_TIME = 902, TV_MENU_PVR_SCHEDULE_REMINDER_DATE_END = 903, TV_MENU_PVR_SCHEDULE_REMINDER_TIME_END = 904; /** IDs for spinners */ public static final int TV_MENU_PVR_SCHEDULE_REMINDER_CHANNEL = 905; public static final int TV_MENU_PVR_SCHEDULE_RECORDING_REPEAT = 906; // fields for creating dialogs private ArrayList<ArrayList<Integer>> contentList = new ArrayList<ArrayList<Integer>>(), contentListIDs = new ArrayList<ArrayList<Integer>>(); private ArrayList<Integer> titleIDs = new ArrayList<Integer>(); private Context ctx; // views from dialogs private A4TVButton btnSetTimeStart, btnAddReminder, btnSetDateStart, btnSetDateEnd, btnSetTimeEnd; private A4TVSpinner spinnerSelectChannel, spinnerRepeat; private static Date dateFromStream = null; private static Date dateStart = null; private static Date dateEnd = null; public PVRManualScheduleDialog(Context context) { super(context, checkTheme(context), 0); ctx = context; // fill lists returnArrayListsWithDialogContents(contentList, contentListIDs, titleIDs); // set content to dialog fillDialog(); // set attributes setDialogAttributes(); init(); } @Override public void show() { fillViewsWithData(true); super.show(); } @Override public void onBackPressed() { super.onBackPressed(); } private void init() { btnSetTimeStart = (A4TVButton) findViewById(TV_MENU_PVR_SCHEDULE_REMINDER_TIME); btnSetDateStart = (A4TVButton) findViewById(TV_MENU_PVR_SCHEDULE_REMINDER_DATE); btnSetTimeEnd = (A4TVButton) findViewById(TV_MENU_PVR_SCHEDULE_REMINDER_TIME_END); btnSetDateEnd = (A4TVButton) findViewById(TV_MENU_PVR_SCHEDULE_REMINDER_DATE_END); btnAddReminder = (A4TVButton) findViewById(TV_MENU_PVR_SCHEDULE_REMINDER_START); spinnerSelectChannel = (A4TVSpinner) findViewById(TV_MENU_PVR_SCHEDULE_REMINDER_CHANNEL); spinnerSelectChannel.setSelection(0); spinnerRepeat = (A4TVSpinner) findViewById(TV_MENU_PVR_SCHEDULE_RECORDING_REPEAT); spinnerRepeat.setSelection(0); } /** * Fill views with data from service */ public void fillViewsWithData(boolean refreshAll) { SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss' 'dd/MM/yyyy"); SimpleDateFormat formatTime = new SimpleDateFormat("HH:mm"); SimpleDateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy"); try { dateFromStream = MainActivity.service.getSystemControl() .getDateAndTimeControl().getTimeDate().getCalendar() .getTime(); dateStart = dateFromStream; dateEnd = dateFromStream; } catch (Exception e) { e.printStackTrace(); } dateStart.setSeconds(0); dateEnd.setSeconds(0); btnSetDateStart.setText(DateTimeConversions.getDateSting(dateFromStream)); btnSetTimeStart.setText(DateTimeConversions.getTimeSting(dateFromStream)); btnSetDateEnd.setText(DateTimeConversions.getDateSting(dateEnd)); btnSetTimeEnd.setText(DateTimeConversions.getTimeSting(dateEnd)); } @Override public void fillDialog() { View view = DialogManager.dialogCreator.fillDialogWithContents( contentList, contentListIDs, titleIDs, null, this, null); setContentView(view); } @Override public void setDialogAttributes() { getWindow().getAttributes().width = MainActivity.dialogWidth; getWindow().getAttributes().height = MainActivity.dialogHeight; } /** * Function that load theme * * @param ctx * @return */ private static int checkTheme(Context ctx) { TypedArray atts = ctx.getTheme().obtainStyledAttributes( new int[] { R.attr.A4TVDialog }); int i = atts.getResourceId(0, 0); atts.recycle(); return i; } @Override public void onClick(final View v) { final SimpleDateFormat formatTime = new SimpleDateFormat("HH:mm"); final SimpleDateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy"); switch (v.getId()) { case TV_MENU_PVR_SCHEDULE_REMINDER_START: { boolean result = startTimer(); if (result) { A4TVToast toast = new A4TVToast(ctx); toast.showToast(R.string.tv_menu_pvr_schedule_toast); } else { A4TVToast toast = new A4TVToast(ctx); toast.showToast(R.string.tv_menu_pvr_schedule_toast_failed); } break; } case TV_MENU_PVR_SCHEDULE_REMINDER_TIME: { A4TVTimePicker timePicker = new A4TVTimePicker(ctx, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { view.clearFocus(); try { dateStart.setMinutes(minute); dateStart.setHours(hourOfDay); btnSetTimeStart.setText(formatTime .format(dateStart)); } catch (Exception e) { e.printStackTrace(); } } }, dateStart.getHours(), dateStart.getMinutes(), true); timePicker.show(); break; } case TV_MENU_PVR_SCHEDULE_REMINDER_DATE: { A4TVDatePicker datePicker = new A4TVDatePicker(ctx, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { view.clearFocus(); dateStart.setDate(dayOfMonth); dateStart.setMonth(monthOfYear); dateStart.setYear(year - 1900); btnSetDateStart.setText(formatDate .format(dateStart)); } }, dateStart.getYear() + 1900, dateStart.getMonth(), dateStart.getDate()); datePicker.show(); break; } case TV_MENU_PVR_SCHEDULE_REMINDER_TIME_END: { A4TVTimePicker timePicker = new A4TVTimePicker(ctx, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { view.clearFocus(); try { dateEnd.setMinutes(minute); dateEnd.setHours(hourOfDay); btnSetTimeEnd.setText(formatTime .format(dateEnd)); } catch (Exception e) { e.printStackTrace(); } } }, dateEnd.getHours(), dateEnd.getMinutes(), true); timePicker.show(); break; } case TV_MENU_PVR_SCHEDULE_REMINDER_DATE_END: { A4TVDatePicker datePicker = new A4TVDatePicker(ctx, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { view.clearFocus(); dateEnd.setDate(dayOfMonth); dateEnd.setMonth(monthOfYear); dateEnd.setYear(year - 1900); btnSetDateEnd.setText(formatDate .format(dateEnd)); } }, dateEnd.getYear() + 1900, dateEnd.getMonth(), dateEnd.getDate()); datePicker.show(); break; } default: break; } } private boolean startTimer() { TimeDate startTime = new TimeDate(); TimeDate endTime = new TimeDate(); Calendar calendarStart = Calendar.getInstance(); calendarStart.setTime(dateStart); Calendar calendarEnd = Calendar.getInstance(); calendarEnd.setTime(dateEnd); int durationSec; int choosenRepeat = spinnerRepeat.getCHOOSEN_ITEM_INDEX(); int choosenChannel = spinnerSelectChannel.getCHOOSEN_ITEM_INDEX(); startTime.setSec(calendarStart.get(Calendar.SECOND)); startTime.setMin(calendarStart.get(Calendar.MINUTE)); startTime.setHour(calendarStart.get(Calendar.HOUR_OF_DAY)); startTime.setDay(calendarStart.get(Calendar.DAY_OF_MONTH)); startTime.setMonth(calendarStart.get(Calendar.MONTH) + 1); startTime.setYear(calendarStart.get(Calendar.YEAR) - 2000); endTime.setSec(calendarEnd.get(Calendar.SECOND)); endTime.setMin(calendarEnd.get(Calendar.MINUTE)); endTime.setHour(calendarEnd.get(Calendar.HOUR_OF_DAY)); endTime.setDay(calendarEnd.get(Calendar.DAY_OF_MONTH)); endTime.setMonth(calendarEnd.get(Calendar.MONTH) + 1); endTime.setYear(calendarEnd.get(Calendar.YEAR) - 2000); /* * Log.d(TAG, "startTime SECOND: "+ startTime.getSec()); Log.d(TAG, * "startTime MINUTE: "+ startTime.getMin()); Log.d(TAG, * "startTime HOUR_OF_DAY: "+ startTime.getHour()); Log.d(TAG, * "startTime DAY_OF_MONTH: "+ startTime.getDay()); Log.d(TAG, * "startTime MONTH: "+ startTime.getMonth()); Log.d(TAG, * "startTime YEAR: "+ startTime.getYear()); */ if (dateFromStream.before(dateStart)) { if (dateStart.before(dateEnd)) { durationSec = (int) (calendarEnd.getTimeInMillis() - calendarStart .getTimeInMillis()) / 1000; Log.d(TAG, "duration: " + durationSec); try { TimerCreateParams timerCreateParams = new TimerCreateParams( choosenChannel, startTime, endTime, TimerRepeatMode.getFromValue(choosenRepeat)); MainActivity.service.getPvrControl().createTimerRecord( timerCreateParams); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } return true; } return false; } return false; } @Override public void returnArrayListsWithDialogContents( ArrayList<ArrayList<Integer>> contentList, ArrayList<ArrayList<Integer>> contentListIDs, ArrayList<Integer> titleIDs) { // clear old data in lists contentList.clear(); contentListIDs.clear(); titleIDs.clear(); // title titleIDs.add(R.drawable.settings_icon); titleIDs.add(R.string.tv_menu_pvr_manual_schedule); ArrayList<Integer> list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVSpinner); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_pvr_manual_reminder_channel); list.add(TV_MENU_PVR_SCHEDULE_REMINDER_CHANNEL); contentListIDs.add(list); list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_pvr_manual_reminder_date); list.add(TV_MENU_PVR_SCHEDULE_REMINDER_DATE); contentListIDs.add(list); list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_pvr_manual_reminder_time); list.add(TV_MENU_PVR_SCHEDULE_REMINDER_TIME); contentListIDs.add(list); list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_pvr_schedule_date_end); list.add(TV_MENU_PVR_SCHEDULE_REMINDER_DATE_END); contentListIDs.add(list); list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_pvr_schedule_time_end); list.add(TV_MENU_PVR_SCHEDULE_REMINDER_TIME_END); contentListIDs.add(list); list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVSpinner); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_pvr_manual_scheduled_recording_repeat); list.add(TV_MENU_PVR_SCHEDULE_RECORDING_REPEAT); contentListIDs.add(list); list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_pvr_manual_scheduled_recording_add); list.add(TV_MENU_PVR_SCHEDULE_REMINDER_START); contentListIDs.add(list); } }