package com.iwedia.gui.components.dialogs;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import com.iwedia.comm.system.date_time.IDateTimeSettings;
import com.iwedia.gui.MainActivity;
import com.iwedia.gui.R;
import com.iwedia.gui.components.A4TVButton;
import com.iwedia.gui.components.A4TVButtonSwitch;
import com.iwedia.gui.components.A4TVDialog;
import com.iwedia.gui.mainmenu.DialogManager;
import com.iwedia.gui.mainmenu.MainMenuContent;
import com.iwedia.gui.pvr.A4TVStorageManager;
import com.iwedia.gui.util.DateTimeConversions;
import java.util.ArrayList;
import java.util.Date;
/**
* Timers settings dialog
*
* @author Mladen Ilic
*/
public class TimersSettingsDialog extends A4TVDialog implements
A4TVDialogInterface, android.view.View.OnClickListener {
public static final String TAG = "TimersSettingsDialog";
/** IDs for buttons */
public static final int TV_MENU_TIMERS_SETTINGS_OFF_TIMERS = 850,
TV_MENU_TIMERS_SETTINGS_GET_TIME = 851,
TV_MENU_TIMERS_SETTINGS_NO_SIGNAL = 852,
TV_MENU_TIMERS_SETTINGS_ON_TIMERS = 853,
TV_MENU_TIMERS_SETTINGS_NO_OPERATION = 854,
TV_MENU_TIMERS_SETTINGS_SET_DEFAULT_SETTINGS = 855;
// 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;
private IDateTimeSettings dateTime;
private boolean is24HourFormat;
// private Timer timer;
private Date date;
// views from dialogs
private A4TVButtonSwitch btnNoSignal, btnNoOperation;
private A4TVButton btnGetTime, btnOffTimer, btnOnTimer,
buttonSetDefaultSettings;
private A4TVStorageManager storage = new A4TVStorageManager();
private Thread backgroundThread;
private Runnable run;
private Handler handler;
public TimersSettingsDialog(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() {
startThread(run);
// fillViewsWithData(true);
super.show();
}
@Override
public void onBackPressed() {
stopThread();
super.onBackPressed();
}
@Override
public void cancel() {
stopThread();
super.cancel();
}
private void init() {
btnGetTime = (A4TVButton) findViewById(TV_MENU_TIMERS_SETTINGS_GET_TIME);
btnNoSignal = (A4TVButtonSwitch) findViewById(TV_MENU_TIMERS_SETTINGS_NO_SIGNAL);
btnNoOperation = (A4TVButtonSwitch) findViewById(TV_MENU_TIMERS_SETTINGS_NO_OPERATION);
btnOffTimer = (A4TVButton) findViewById(TV_MENU_TIMERS_SETTINGS_OFF_TIMERS);
btnOnTimer = (A4TVButton) findViewById(TV_MENU_TIMERS_SETTINGS_ON_TIMERS);
buttonSetDefaultSettings = (A4TVButton) findViewById(TV_MENU_TIMERS_SETTINGS_SET_DEFAULT_SETTINGS);
buttonSetDefaultSettings.setText(R.string.button_text_ok);
disableBtn(btnGetTime);
disableBtn(btnOnTimer);
fillViewsWithData(true);
// init runnable to be run in thread
run = new Runnable() {
@Override
public void run() {
while (true) {
Thread thisThread = Thread.currentThread();
if (thisThread.equals(backgroundThread)) {
handler.sendEmptyMessage(0);
try {
// Sleep 5 seconds
Thread.sleep(5 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
break;
}
}
}
};
// init handler
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
fillViewsWithData(true);
super.handleMessage(msg);
}
};
}
/** Disable clicks on buttons and clear background */
private void disableBtn(A4TVButton btn) {
btn.setClickable(false);
btn.setBackgroundColor(Color.TRANSPARENT);
}
/**
* 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();
}
boolean noSignal = false;
boolean noOperation = false;
try {
noSignal = MainActivity.service.getSetupControl().getNoSignalOff();
} catch (Exception e) {
e.printStackTrace();
}
try {
noOperation = MainActivity.service.getSetupControl()
.getNoOperationOff();
} catch (Exception e) {
e.printStackTrace();
}
if (refreshAll) {
/**************************************************************/
/** No signal and no operation timers update */
if (noSignal) {
btnNoSignal.setSelectedStateAndText(true,
R.string.button_text_yes);
} else {
btnNoSignal.setSelectedStateAndText(false,
R.string.button_text_no);
}
/**************************************************************/
}
if (refreshAll) {
/**************************************************************/
if (noOperation) {
btnNoOperation.setSelectedStateAndText(true,
R.string.button_text_yes);
} else {
btnNoOperation.setSelectedStateAndText(false,
R.string.button_text_no);
}
/**************************************************************/
}
try {
if (dateTime != null) {
date = dateTime.getTimeDate().getCalendar().getTime();
}
} catch (Exception e) {
e.printStackTrace();
}
if (date != null) {
try {
btnGetTime.setText(DateTimeConversions.getTimeSting(date));
TimersSettingsDialog.this.show();
} 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_TIMERS_SETTINGS_NO_SIGNAL: {
if (v.isSelected()) {
((A4TVButtonSwitch) v).setSelectedStateAndText(false,
R.string.button_text_no);
} else {
((A4TVButtonSwitch) v).setSelectedStateAndText(true,
R.string.button_text_yes);
}
try {
MainActivity.service.getSetupControl().setNoSignalOff(
v.isSelected());
} catch (Exception e) {
e.printStackTrace();
}
fillViewsWithData(true);
break;
}
case TV_MENU_TIMERS_SETTINGS_NO_OPERATION: {
if (v.isSelected()) {
((A4TVButtonSwitch) v).setSelectedStateAndText(false,
R.string.button_text_no);
} else {
((A4TVButtonSwitch) v).setSelectedStateAndText(true,
R.string.button_text_yes);
}
try {
MainActivity.service.getSetupControl().setNoOperationOff(
v.isSelected());
} catch (Exception e) {
e.printStackTrace();
}
fillViewsWithData(true);
break;
}
case TV_MENU_TIMERS_SETTINGS_OFF_TIMERS: {
OffTimersSettingsDialog offTimersSettDialog = MainActivity.activity
.getDialogManager().getOffTimersSettingsDialog();
if (offTimersSettDialog != null) {
offTimersSettDialog.show();
}
break;
}
case TV_MENU_TIMERS_SETTINGS_ON_TIMERS: {
break;
}
case TV_MENU_TIMERS_SETTINGS_GET_TIME: {
break;
}
case TV_MENU_TIMERS_SETTINGS_SET_DEFAULT_SETTINGS: {
try {
MainActivity.service.getSetupControl()
.resetTimersSettings();
} catch (Exception e) {
e.printStackTrace();
}
this.show();
break;
}
default:
break;
}
}
/**
* Start background thread
*
* @param run
* Runnable to run in thread
*/
public void startThread(Runnable run) {
Log.d(TAG, "start thread entered");
if (backgroundThread == null) {
backgroundThread = new Thread(run);
backgroundThread.setPriority(Thread.MIN_PRIORITY);
backgroundThread.start();
}
}
/**
* Stops background thread
*/
public void stopThread() {
Log.d(TAG, "stop thread entered");
if (backgroundThread != null) {
Thread moribund = backgroundThread;
backgroundThread = null;
moribund.interrupt();
}
}
@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_timers_settings);
// clock******************************************
ArrayList<Integer> 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_TIMERS_SETTINGS_GET_TIME);
contentListIDs.add(list);
// off timers settings******************************************
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_off_timers);
list.add(TV_MENU_TIMERS_SETTINGS_OFF_TIMERS);
contentListIDs.add(list);
// on timers settings******************************************
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_on_timers);
list.add(TV_MENU_TIMERS_SETTINGS_ON_TIMERS);
contentListIDs.add(list);
// no signal off******************************************
list = new ArrayList<Integer>();
list.add(MainMenuContent.TAGA4TVTextView);
list.add(MainMenuContent.TAGA4TVButtonSwitch);
contentList.add(list);
list = new ArrayList<Integer>();
list.add(R.string.tv_menu_timers_settings_no_signal);
list.add(TV_MENU_TIMERS_SETTINGS_NO_SIGNAL);
contentListIDs.add(list);
// no operation off******************************************
list = new ArrayList<Integer>();
list.add(MainMenuContent.TAGA4TVTextView);
list.add(MainMenuContent.TAGA4TVButtonSwitch);
contentList.add(list);
list = new ArrayList<Integer>();
list.add(R.string.tv_menu_timers_settings_no_operation);
list.add(TV_MENU_TIMERS_SETTINGS_NO_OPERATION);
contentListIDs.add(list);
// set default settings******************************************
list = new ArrayList<Integer>();
list.add(MainMenuContent.TAGA4TVTextView);
list.add(MainMenuContent.TAGA4TVButton);
contentList.add(list);
list = new ArrayList<Integer>();
list.add(com.iwedia.gui.R.string.tv_menu_sound_settings_set_default_settings);
list.add(TV_MENU_TIMERS_SETTINGS_SET_DEFAULT_SETTINGS);
contentListIDs.add(list);
}
}