package com.iwedia.gui.components.dialogs;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Context;
import android.content.res.TypedArray;
import android.view.View;
import android.widget.TimePicker;
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.components.A4TVTimePicker;
import com.iwedia.gui.mainmenu.DialogManager;
import com.iwedia.gui.mainmenu.MainMenuContent;
import java.util.ArrayList;
/**
* Screensaver settings dialog
*
* @author Mladen Ilic
*/
public class ScreensaverSettingsDialog extends A4TVDialog implements
A4TVDialogInterface, android.view.View.OnClickListener {
/** IDs for buttons */
public static final int TV_MENU_SCREENSAVER_START = 1111,
TV_MENU_SCREENSAVER_SET_TIME = 1112;
// 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 A4TVButton buttonSetTime;
private A4TVButtonSwitch buttonStart;
Context ctx;
private int minutesTimers = 0;
private int hoursTimers = 0;
public ScreensaverSettingsDialog(Context context) {
super(context, checkTheme(context), 0);
ctx = context;
// fill lists
returnArrayListsWithDialogContents(contentList, contentListIDs,
titleIDs);
// set content to dialog
fillDialog();
// set attributes
setDialogAttributes();
init();
}
/** Get references from views and set look and feel */
private void init() {
buttonStart = (A4TVButtonSwitch) findViewById(TV_MENU_SCREENSAVER_START);
buttonSetTime = (A4TVButton) findViewById(TV_MENU_SCREENSAVER_SET_TIME);
}
@Override
public void show() {
setViews();
super.show();
}
/** Get informations from service and display it */
private void setViews() {
/* Get stored screen saver enable */
boolean isEnabled = MainActivity.sharedPrefs.getBoolean(
MainActivity.SCREENSAVER_ENABLED, true);
buttonStart.setSelectedStateAndText(isEnabled,
isEnabled ? R.string.button_text_on : R.string.button_text_off);
/*
* Get stored screen saver start time in milliseconds (default 10
* minutes)
*/
int screensaverSetTimeMiliseconds = MainActivity.sharedPrefs.getInt(
MainActivity.SCREENSAVER_TIME_MILISECONDS,
MainActivity.activity.getScreenSaverDialog().TIME_DEFAULT);
StringBuilder builder = new StringBuilder();
int minutes = (int) ((screensaverSetTimeMiliseconds / (1000 * 60)) % 60);
int hours = (int) ((screensaverSetTimeMiliseconds / (1000 * 60 * 60)) % 24);
String minutesStr = String.format("%02d", minutes);
String hoursStr = String.format("%02d", hours);
buttonSetTime.setText(builder.append(hoursStr).append(":")
.append(minutesStr));
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case TV_MENU_SCREENSAVER_START: {
if (v.isSelected()) {
((A4TVButtonSwitch) v).setSelectedStateAndText(false,
R.string.button_text_off);
} else {
((A4TVButtonSwitch) v).setSelectedStateAndText(true,
R.string.button_text_on);
}
/* Save selection */
MainActivity.sharedPrefs
.edit()
.putBoolean(MainActivity.SCREENSAVER_ENABLED,
v.isSelected()).commit();
break;
}
case TV_MENU_SCREENSAVER_SET_TIME: {
String minutes = "0";
String hours = "0";
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();
String minutesTimersStr = String.format(
"%02d", minutesTimers);
String hoursTimersStr = String.format(
"%02d", hoursTimers);
((A4TVButton) ScreensaverSettingsDialog.this
.findViewById(TV_MENU_SCREENSAVER_SET_TIME))
.setText(builder
.append(hoursTimersStr)
.append(":")
.append(minutesTimersStr));
/* Save selection */
MainActivity.sharedPrefs
.edit()
.putInt(MainActivity.SCREENSAVER_TIME_MILISECONDS,
hoursTimers * 60 * 60
* 1000
+ minutesTimers
* 60 * 1000)
.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
}, Integer.parseInt(hours), Integer.parseInt(minutes),
true);
timePicker.show();
break;
}
default:
break;
}
MainActivity.activity.getScreenSaverDialog().updateScreensaverTimer();
}
@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 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_screensaver_settings);
ArrayList<Integer> list;
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_screensaver_start);
list.add(TV_MENU_SCREENSAVER_START);
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_screensaver_set_time);
list.add(TV_MENU_SCREENSAVER_SET_TIME);
contentListIDs.add(list);
}
}