package com.iwedia.gui.components.dialogs; import android.app.TimePickerDialog.OnTimeSetListener; import android.content.Context; import android.content.res.TypedArray; import android.os.RemoteException; import android.view.View; import android.widget.TimePicker; import com.iwedia.comm.system.date_time.IDateTimeSettings; 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.A4TVDialog; import com.iwedia.gui.components.A4TVSpinner; import com.iwedia.gui.components.A4TVSpinner.OnSelectA4TVSpinnerListener; import com.iwedia.gui.components.A4TVTimePicker; import com.iwedia.gui.mainmenu.DialogManager; import com.iwedia.gui.mainmenu.MainMenuContent; import com.iwedia.gui.util.DateTimeConversions; import java.util.ArrayList; import java.util.Date; /** * Off timers add dialog * * @author Mladen Ilic */ public class OffTimersAddDialog extends A4TVDialog implements A4TVDialogInterface, android.view.View.OnClickListener { /** IDs for buttons */ public static final int TV_MENU_OFFTIMERS_SETTINGS_START = 871, TV_MENU_OFFTIMERS_SETTINGS_TIME = 872; /** IDs for spinners */ public static final int TV_MENU_OFFTIMERS_SETTINGS_REPEAT_MODE = 873; // 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 btnSetTime, btnAddTimer; private A4TVSpinner spinnerSelectRepeatMode; private IDateTimeSettings dateTime; private Date date; private int minutesTimers = 0; private int hoursTimers = 0; public OffTimersAddDialog(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(); } @Override public void cancel() { int repeatMode = 0; spinnerSelectRepeatMode.setSelection(repeatMode); btnSetTime.setClickable(true); btnAddTimer.setClickable(true); super.cancel(); } private void init() { btnSetTime = (A4TVButton) findViewById(TV_MENU_OFFTIMERS_SETTINGS_TIME); btnAddTimer = (A4TVButton) findViewById(TV_MENU_OFFTIMERS_SETTINGS_START); spinnerSelectRepeatMode = (A4TVSpinner) findViewById(TV_MENU_OFFTIMERS_SETTINGS_REPEAT_MODE); // btnSetTime.setClickable(false); // btnAddTimer.setClickable(false); int repeatMode = 0; spinnerSelectRepeatMode.setSelection(repeatMode); spinnerSelectRepeatMode .setOnSelectA4TVSpinnerListener(new OnSelectA4TVSpinnerListener() { @Override public void onSelect(A4TVSpinner spinner, int index, String[] contents) { if (spinnerSelectRepeatMode.getCHOOSEN_ITEM_INDEX() == 0) { spinnerSelectRepeatMode .setSelection(spinnerSelectRepeatMode .getCHOOSEN_ITEM_INDEX()); // btnSetTime.setClickable(false); // btnAddTimer.setClickable(false); } else { // btnSetTime.setClickable(true); // btnAddTimer.setClickable(true); spinnerSelectRepeatMode .setSelection(spinnerSelectRepeatMode .getCHOOSEN_ITEM_INDEX()); } } }); } /** * Fill views with data from service */ public void fillViewsWithData(boolean refreshAll) { // if service returns real object dateTime = null; try { dateTime = MainActivity.service.getSystemControl() .getDateAndTimeControl(); } catch (Exception e) { e.printStackTrace(); } try { if (dateTime != null) { date = dateTime.getTimeDate().getCalendar().getTime(); } } catch (Exception e) { e.printStackTrace(); } if (date != null) { try { btnSetTime.setText(DateTimeConversions.getTimeSting(date)); } catch (Exception e) { e.printStackTrace(); } } } @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) { switch (v.getId()) { case TV_MENU_OFFTIMERS_SETTINGS_START: { startTimer(); cancel(); break; } case TV_MENU_OFFTIMERS_SETTINGS_TIME: { dateTime = null; date = null; try { dateTime = MainActivity.service.getSystemControl() .getDateAndTimeControl(); } catch (Exception e1) { e1.printStackTrace(); } try { if (dateTime != null) { date = dateTime.getTimeDate().getCalendar().getTime(); } } catch (Exception e) { e.printStackTrace(); } A4TVTimePicker timePicker = new A4TVTimePicker(ctx, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { view.clearFocus(); try { minutesTimers = minute; hoursTimers = hourOfDay; StringBuilder builder = new StringBuilder(); ((A4TVButton) OffTimersAddDialog.this .findViewById(TV_MENU_OFFTIMERS_SETTINGS_TIME)) .setText(DateTimeConversions .getTimeSting(date)); } catch (Exception e) { e.printStackTrace(); } } }, date.getHours(), date.getMinutes(), true); timePicker.show(); break; } default: break; } } private void startTimer() { dateTime = null; date = null; TimeDate addTime = new TimeDate(); int choosenRepeatMode; choosenRepeatMode = spinnerSelectRepeatMode.getCHOOSEN_ITEM_INDEX(); try { MainActivity.service.getSetupControl().setOffTimerRepeat( TimerRepeatMode.values()[choosenRepeatMode]); } catch (Exception e) { e.printStackTrace(); } if (addTime != null) { try { dateTime = MainActivity.service.getSystemControl() .getDateAndTimeControl(); } catch (Exception e1) { e1.printStackTrace(); } try { if (dateTime != null) { date = dateTime.getTimeDate().getCalendar().getTime(); } } catch (Exception e) { e.printStackTrace(); } Integer min = date.getMinutes(); Integer hour = date.getHours(); if (min <= minutesTimers) { int i = minutesTimers - min; addTime.setMin(i); if (hour <= hoursTimers) { int i1 = hoursTimers - hour; addTime.setHour(i1); } else { int i2 = 24 - hour + hoursTimers; addTime.setHour(i2); } } else { int j = 60 - min + minutesTimers; addTime.setMin(j); if (hour < hoursTimers) { int j1 = hoursTimers - hour - 1; addTime.setHour(j1); } else { int j2 = 23 - hour + hoursTimers; addTime.setHour(j2); } } try { MainActivity.service.getSetupControl().setOffTimer(addTime); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { MainActivity.service.getSetupControl().startOffTimer(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @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_off_timers_settings); 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_off_timers_repeat_mode); list.add(TV_MENU_OFFTIMERS_SETTINGS_REPEAT_MODE); 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_timers_settings_time); list.add(TV_MENU_OFFTIMERS_SETTINGS_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_off_timers_add); list.add(TV_MENU_OFFTIMERS_SETTINGS_START); contentListIDs.add(list); } }