package com.iwedia.gui.components.dialogs;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.TypedArray;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.os.RemoteException;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.TextView;
import com.iwedia.comm.IReminderControl;
import com.iwedia.comm.content.Content;
import com.iwedia.comm.content.IContentListControl;
import com.iwedia.dtv.epg.EpgEvent;
import com.iwedia.dtv.epg.EpgEventType;
import com.iwedia.dtv.pvr.SmartCreateParams;
import com.iwedia.dtv.reminder.ReminderSmartInfo;
import com.iwedia.dtv.reminder.ReminderSmartParam;
import com.iwedia.dtv.reminder.ReminderTimerInfo;
import com.iwedia.dtv.reminder.ReminderType;
import com.iwedia.dtv.types.TimeDate;
import com.iwedia.gui.MainActivity;
import com.iwedia.gui.R;
import com.iwedia.gui.components.A4TVAlertDialog;
import com.iwedia.gui.components.A4TVButton;
import com.iwedia.gui.components.A4TVDialog;
import com.iwedia.gui.components.A4TVTextView;
import com.iwedia.gui.components.A4TVToast;
import com.iwedia.gui.config_handler.ConfigHandler;
import com.iwedia.gui.osd.OSDGlobal;
import com.iwedia.gui.util.DateTimeConversions;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
/**
* Dialog for EPG scheduling
*
* @author Branimir Pavlovic
*/
public class EPGScheduleDialog extends A4TVDialog implements
A4TVDialogInterface, OSDGlobal {
public static final String TAG = "EPGScheduleDialog";
private Context ctx;
private A4TVTextView eventName, eventTime, eventDescription, eventGenre,
tvGenre, eventComponents;
private A4TVButton buttonScheduleRecord, buttonReminder, buttonIMDBInfo,
buttonNowNext;
private TextView textViewParentalRate;
private EpgEvent event, eventNext;
private A4TVAlertDialog alertDialog;
// fields for callback
private A4TVAlertDialog alertDialogCallBack;
private Handler handlerForCallback;
// private EpgEvent eventReminder;
private static Content activeContent = null;
public EPGScheduleDialog(Context context) {
super(context, checkTheme(context), 0);
ctx = context;
fillDialog();
setDialogAttributes();
init();
setMenuButtonEnabled(false);
}
@Override
public void fillDialog() {
setContentView(R.layout.epg_schedule_dialog);
}
/**
* 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;
}
// not needed here, attributes are passed by style
@Override
public void setDialogAttributes() {
getWindow().getAttributes().width = (int) (MainActivity.dialogWidth);
getWindow().getAttributes().height = (int) (MainActivity.dialogHeight);
}
public void showEpgExtended(EpgEvent event, EpgEvent eventNext,
boolean isFromEPG) {
StringBuffer components = new StringBuffer();
String extendedDescription = "";
components.append(ctx.getResources().getString(
R.string.component_type_components)
+ "\n");
// String components = ctx.getResources().getString(
// R.string.component_type_components)
// + "\n";
this.event = event;
this.eventNext = eventNext;
try {
activeContent = MainActivity.activity.getPageCurl()
.getChannelChangeHandler().getActiveContent();
} catch (Exception e) {
e.printStackTrace();
}
tvGenre.setText(R.string.epg_genre);
if (isFromEPG) {
eventName.setText(event.getName());
} else {
buttonNowNext.setText(R.string.next);
if (activeContent != null) {
eventName.setText(activeContent.getName() + " - "
+ event.getName());
}
}
eventTime.setText(DateTimeConversions.getDateTimeSting(event
.getStartTime().getCalendar().getTime())
+ " - "
+ DateTimeConversions.getDateTimeSting(event.getEndTime()
.getCalendar().getTime()));
try {
extendedDescription = MainActivity.service.getEpgControl()
.getEventExtendedDescription(0, event.getEventId(),
activeContent.getIndex());
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (extendedDescription.length() == 0) {
eventDescription.setText(event.getDescription());
} else {
eventDescription.setText(extendedDescription);
}
for (int i = 0; i < event.getNumberOfComponents(); i++) {
components.append(String.format(
"%d. %s %s",
i + 1,
getComponentDescription(event.getComponentType(i)
.getStreamContent(), event.getComponentType(i)
.getComponenetType(), event.getComponentType(i)
.getLanguageCode()), "\n"));
}
eventComponents.setText(components);
eventGenre.setText(convertGenreToString(event.getGenre()));
if (event.getGenre() == 1) {
buttonIMDBInfo.setVisibility(View.VISIBLE);
buttonIMDBInfo.setOnClickListener(new IMDBButtonClickListener(event
.getName()));
} else {
buttonIMDBInfo.setVisibility(View.INVISIBLE);
}
Log.d(TAG, "PARENTAL RATE: " + event.getParentalRate());
if (event.getParentalRate() > 0) {
textViewParentalRate.setVisibility(View.VISIBLE);
textViewParentalRate
.setText(String.valueOf(event.getParentalRate()));
} else {
textViewParentalRate.setVisibility(View.INVISIBLE);
}
/** Check if event is running */
Date dateFromStream = null;
/** Check time from stream */
try {
dateFromStream = MainActivity.service.getSystemControl()
.getDateAndTimeControl().getTimeDate().getCalendar()
.getTime();
} catch (Exception e) {
e.printStackTrace();
}
Date start = null;// , end = null;
start = event.getStartTime().getCalendar().getTime();
// if it is running event hide buttons for reminder and PVR
if (dateFromStream != null && start != null) {
if (isFromEPG) {
buttonNowNext.setVisibility(View.GONE);
buttonReminder.setVisibility(View.VISIBLE);
// Check config file
if (!ConfigHandler.PVR) {
// Hide schedule record button
buttonScheduleRecord.setVisibility(View.INVISIBLE);
} else {
buttonScheduleRecord.setVisibility(View.VISIBLE);
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// Check config file
if (!ConfigHandler.PVR) {
buttonReminder.requestFocus();
} else {
buttonScheduleRecord.requestFocus();
}
}
}, 150);
} else {
buttonNowNext.setVisibility(View.VISIBLE);
buttonReminder.setVisibility(View.GONE);
buttonScheduleRecord.setVisibility(View.INVISIBLE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
buttonNowNext.requestFocus();
}
}, 150);
}
} else {
if (!isFromEPG) {
try {
activeContent = MainActivity.activity.getPageCurl()
.getChannelChangeHandler().getActiveContent();
} catch (Exception e) {
e.printStackTrace();
}
if (activeContent != null) {
eventName.setText(activeContent.getName()
+ " - "
+ ctx.getResources()
.getString(R.string.epg_no_data));
eventTime.setText("");
tvGenre.setText("");
}
buttonNowNext.setVisibility(View.VISIBLE);
buttonReminder.setVisibility(View.GONE);
buttonScheduleRecord.setVisibility(View.INVISIBLE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
buttonNowNext.requestFocus();
}
}, 150);
}
}
super.show();
}
public void setUpNewExtendedInfo(int serviceIndex) {
StringBuffer components = new StringBuffer();
components.append(ctx.getResources().getString(
R.string.component_type_components)
+ "\n");
String extendedDescription = "";
try {
buttonNowNext.setText(R.string.next);
activeContent = MainActivity.activity.getPageCurl()
.getChannelChangeHandler()
.getContentExtendedInfoByIndex(serviceIndex);
} catch (Exception e) {
e.printStackTrace();
}
try {
this.event = MainActivity.service.getEpgControl()
.getPresentFollowingEvent(0, serviceIndex,
EpgEventType.PRESENT_EVENT);
this.eventNext = MainActivity.service.getEpgControl()
.getPresentFollowingEvent(0, serviceIndex,
EpgEventType.FOLLOWING_EVENT);
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (buttonNowNext.getText().toString()
.equals(ctx.getResources().getString(R.string.now))) {
event = eventNext;
}
tvGenre.setText(R.string.epg_genre);
try {
extendedDescription = MainActivity.service.getEpgControl()
.getEventExtendedDescription(0, event.getEventId(),
serviceIndex);
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (activeContent != null) {
eventName
.setText(activeContent.getName() + " - " + event.getName());
}
eventTime.setText(DateTimeConversions.getDateTimeSting(event
.getStartTime().getCalendar().getTime())
+ " - "
+ DateTimeConversions.getDateTimeSting(event.getEndTime()
.getCalendar().getTime()));
if (extendedDescription.length() == 0) {
eventDescription.setText("");
} else {
eventDescription.setText(extendedDescription);
}
for (int i = 0; i < event.getNumberOfComponents(); i++) {
components.append(String.format(
"%d. %s %s",
i + 1,
getComponentDescription(event.getComponentType(i)
.getStreamContent(), event.getComponentType(i)
.getComponenetType(), event.getComponentType(i)
.getLanguageCode()), "\n"));
}
eventComponents.setText(components);
eventGenre.setText(convertGenreToString(event.getGenre()));
if (event.getGenre() == 1) {
buttonIMDBInfo.setVisibility(View.VISIBLE);
buttonIMDBInfo.setOnClickListener(new IMDBButtonClickListener(event
.getName()));
} else {
buttonIMDBInfo.setVisibility(View.INVISIBLE);
}
if (event.getParentalRate() > 0) {
textViewParentalRate.setVisibility(View.VISIBLE);
textViewParentalRate
.setText(String.valueOf(event.getParentalRate()));
} else {
textViewParentalRate.setVisibility(View.INVISIBLE);
}
/** Check if event is running */
Date dateFromStream = null;
/** Check time from stream */
try {
dateFromStream = MainActivity.service.getSystemControl()
.getDateAndTimeControl().getTimeDate().getCalendar()
.getTime();
} catch (Exception e) {
e.printStackTrace();
}
Date start = null;
start = event.getStartTime().getCalendar().getTime();
// if it is running event hide buttons for reminder and PVR
if (dateFromStream != null && start != null) {
buttonNowNext.setVisibility(View.VISIBLE);
buttonReminder.setVisibility(View.GONE);
buttonScheduleRecord.setVisibility(View.INVISIBLE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
buttonNowNext.requestFocus();
}
}, 150);
} else {
if (activeContent != null) {
eventName.setText(activeContent.getName() + " - "
+ ctx.getResources().getString(R.string.epg_no_data));
eventTime.setText("");
tvGenre.setText("");
}
buttonNowNext.setVisibility(View.VISIBLE);
buttonReminder.setVisibility(View.GONE);
buttonScheduleRecord.setVisibility(View.INVISIBLE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
buttonNowNext.requestFocus();
}
}, 150);
}
super.show();
}
private static String toASCII(int value) {
int length = 3;
StringBuilder builder = new StringBuilder(length);
for (int i = length - 1; i >= 0; i--) {
builder.append((char) ((value >> (8 * i)) & 0xFF));
}
return builder.toString();
}
/** Take reference of important views */
private void init() {
eventName = (A4TVTextView) findViewById(R.id.aTVTextViewEventName);
eventTime = (A4TVTextView) findViewById(R.id.aTVTextViewEventTime);
eventDescription = (A4TVTextView) findViewById(R.id.aTVTextViewEventDescription);
eventGenre = (A4TVTextView) findViewById(R.id.aTVTextViewGenre);
tvGenre = (A4TVTextView) findViewById(R.id.aTVTextViewGenreText);
textViewParentalRate = (TextView) findViewById(R.id.textViewParentalRate);
eventComponents = (A4TVTextView) findViewById(R.id.aTVTextViewEventComponents);
eventComponents.setSingleLine(false);
buttonScheduleRecord = (A4TVButton) findViewById(R.id.aTVButtonEpgScheduleRecording);
buttonScheduleRecord.setOnClickListener(new ButtonScheduleListener());
// Check config file
if (!ConfigHandler.PVR) {
// Hide schedule record button
buttonScheduleRecord.setVisibility(View.INVISIBLE);
}
// bug fix for event name in two rows
eventName.setSingleLine(true);
eventName.setSelected(true);
buttonIMDBInfo = (A4TVButton) findViewById(R.id.aTVButtonEPGIMDBInfo);
buttonIMDBInfo.setVisibility(View.INVISIBLE);
buttonReminder = (A4TVButton) findViewById(R.id.aTVButtonEpgReminder);
buttonReminder
.setOnClickListener(new ScheduleReminderOnCLickListener());
buttonNowNext = (A4TVButton) findViewById(R.id.aTVButtonNowNext);
buttonNowNext.setOnClickListener(new NowNextClickListener());
handlerForCallback = new Handler() {
// TODO: Applies on main display only
private final int mDisplayId = 0;
ReminderSmartInfo smartInfo = null;
ReminderTimerInfo timerInfo = null;
ReminderType type = ReminderType.REMINDER_TIMER;
String title;
int serviceIndex = 0;
TimeDate time;
@Override
public void handleMessage(Message msg) {
final int index = msg.what;
boolean startStopReminder = (Boolean) msg.obj;
IReminderControl reminderControl = null;
IContentListControl contentListControl = null;
try {
contentListControl = MainActivity.service
.getContentListControl();
reminderControl = MainActivity.service.getReminderControl();
} catch (Exception e) {
e.printStackTrace();
}
if (reminderControl != null) {
try {
type = reminderControl.getType(index);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
timerInfo = null;
smartInfo = null;
if (type == ReminderType.REMINDER_TIMER) {
try {
timerInfo = reminderControl.getTimerInfo(index);
title = timerInfo.getTitle();
serviceIndex = timerInfo.getServiceIndex();
time = timerInfo.getTime();
} catch (Exception e1) {
e1.printStackTrace();
}
} else {
try {
smartInfo = reminderControl.getSmartInfo(index);
title = smartInfo.getTitle();
serviceIndex = smartInfo.getServiceIndex();
time = smartInfo.getTime();
} catch (Exception e1) {
e1.printStackTrace();
}
}
if (timerInfo != null || smartInfo != null) {
// check if reminder is for current channel
if (contentListControl != null) {
Content content = null;
try {
content = contentListControl
.getActiveContent(mDisplayId);
} catch (Exception e) {
e.printStackTrace();
}
if (content != null) {
if (content.getIndexInMasterList() == serviceIndex) {
try {
reminderControl.destroy(index);
return;
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
Log.d(TAG,
"%%%%%%%%%%%%%% REMINDER CALLBACK ACTIVE CONTENT IS NULL %%%%%%%%%%%%%%%%%");
}
}
alertDialogCallBack = new A4TVAlertDialog(ctx);
alertDialogCallBack.setCancelable(true);
// ////////////////////////////////////////
// Title
// ////////////////////////////////////////
if (contentListControl != null) {
if (startStopReminder) {
try {
alertDialogCallBack
.setTitleOfAlertDialog(ctx
.getResources()
.getString(
R.string.epg_scheduled_reminder)
+ ": "
+ contentListControl
.getServiceByIndexInMasterList(
serviceIndex,
false)
.getName()
+ " - "
+ title);
} catch (Exception e1) {
e1.printStackTrace();
}
}
// /////////////////////////////////
// REMINDER PASSED
// //////////////////////////////////
else {
try {
alertDialogCallBack
.setTitleOfAlertDialog(ctx
.getResources()
.getString(
R.string.epg_scheduled_reminder)
+ ": "
+ contentListControl
.getServiceByIndexInMasterList(
serviceIndex,
false)
.getName()
+ " - "
+ title
+ " "
+ ctx.getResources()
.getString(
R.string.epg_scheduled_reminder_passed));
} catch (Exception e1) {
e1.printStackTrace();
}
}
} else {
if (startStopReminder) {
alertDialogCallBack
.setTitleOfAlertDialog(ctx
.getResources()
.getString(
R.string.epg_scheduled_reminder)
+ ": " + title);
}
// /////////////////////////////////
// REMINDER PASSED
// //////////////////////////////////
else {
alertDialogCallBack
.setTitleOfAlertDialog(ctx
.getResources()
.getString(
R.string.epg_scheduled_reminder)
+ ": "
+ title
+ " "
+ ctx.getResources()
.getString(
R.string.epg_scheduled_reminder_passed));
}
}
// ////////////////////////////////////////
// Message
// ////////////////////////////////////////
alertDialogCallBack.setMessage(ctx.getResources()
.getString(R.string.duration)
+ " "
+ DateTimeConversions.getTimeSting(time
.getCalendar().getTime()));
alertDialogCallBack
.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
try {
MainActivity.service
.getReminderControl()
.destroy(index);
} catch (Exception e) {
e.printStackTrace();
}
}
});
alertDialogCallBack.setPositiveButton(
R.string.parental_control_ok,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialogCallBack.cancel();
}
});
if (startStopReminder) {
alertDialogCallBack.setNegativeButton(
R.string.epg_reminder_go_to_channel,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
Content content = null;
Log.d(TAG,
"INDEX OF SERVICE FROM REMINDER: "
+ (serviceIndex));
try {
content = MainActivity.service
.getContentListControl()
.getContentByIndexInMasterList(
serviceIndex);
} catch (RemoteException e) {
e.printStackTrace();
}
if (content != null) {
MainActivity.activity
.getPageCurl()
.changeChannelByContent(
content,
mDisplayId);
}
alertDialogCallBack.cancel();
}
});
}
alertDialogCallBack.show();
}
}
super.handleMessage(msg);
}
};
}
private class NowNextClickListener implements
android.view.View.OnClickListener {
@Override
public void onClick(View v) {
StringBuffer components = new StringBuffer();
String extendedDescription = "";
components.append(ctx.getResources().getString(
R.string.component_type_components)
+ "\n");
tvGenre.setText(R.string.epg_genre);
// show next
if (buttonNowNext.getText().toString()
.equals(ctx.getResources().getString(R.string.next))) {
boolean isInfoExist = false;
try {
eventName.setText("");
if (activeContent != null) {
String str;
if (eventNext.getName().length() == 0) {
str = ctx.getResources().getString(
R.string.epg_no_data);
isInfoExist = false;
} else {
str = eventNext.getName();
isInfoExist = true;
}
eventName
.setText(activeContent.getName() + " - " + str);
}
} catch (Exception e) {
e.printStackTrace();
}
if (isInfoExist) {
eventTime.setText(DateTimeConversions
.getDateTimeSting(eventNext.getStartTime()
.getCalendar().getTime())
+ " - "
+ DateTimeConversions.getDateTimeSting(eventNext
.getEndTime().getCalendar().getTime()));
} else {
eventTime.setText("");
}
try {
extendedDescription = MainActivity.service.getEpgControl()
.getEventExtendedDescription(0, event.getEventId(),
activeContent.getIndex());
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (extendedDescription.length() == 0) {
eventDescription.setText(eventNext.getDescription());
} else {
eventDescription.setText(extendedDescription);
}
for (int i = 0; i < eventNext.getNumberOfComponents(); i++) {
components.append(String.format(
"%d. %s %s",
i + 1,
getComponentDescription(
eventNext.getComponentType(i)
.getStreamContent(), eventNext
.getComponentType(i)
.getComponenetType(), eventNext
.getComponentType(i)
.getLanguageCode()), "\n"));
}
eventComponents.setText(components);
if (isInfoExist) {
eventGenre.setText(convertGenreToString(event.getGenre()));
} else {
eventGenre.setText("");
tvGenre.setText("");
}
if (eventNext.getGenre() == 1) {
buttonIMDBInfo.setVisibility(View.VISIBLE);
buttonIMDBInfo
.setOnClickListener(new IMDBButtonClickListener(
eventNext.getName()));
} else {
buttonIMDBInfo.setVisibility(View.INVISIBLE);
}
if (eventNext.getParentalRate() > 0) {
textViewParentalRate.setVisibility(View.VISIBLE);
textViewParentalRate.setText(String.valueOf(eventNext
.getParentalRate()));
} else {
textViewParentalRate.setVisibility(View.INVISIBLE);
}
buttonNowNext.setText(R.string.now);
}
// show now
else {
boolean isInfoExist = false;
try {
eventName.setText("");
if (activeContent != null) {
String str;
if (event.getName().length() == 0) {
str = ctx.getResources().getString(
R.string.epg_no_data);
isInfoExist = false;
} else {
str = event.getName();
isInfoExist = true;
}
eventName
.setText(activeContent.getName() + " - " + str);
}
} catch (Exception e) {
e.printStackTrace();
}
if (isInfoExist) {
eventTime.setText(DateTimeConversions
.getDateTimeSting(eventNext.getStartTime()
.getCalendar().getTime())
+ " - "
+ DateTimeConversions.getDateTimeSting(eventNext
.getEndTime().getCalendar().getTime()));
} else {
eventTime.setText("");
}
try {
extendedDescription = MainActivity.service.getEpgControl()
.getEventExtendedDescription(0, event.getEventId(),
activeContent.getIndex());
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (extendedDescription.length() == 0) {
eventDescription.setText("");
} else {
eventDescription.setText(extendedDescription);
}
for (int i = 0; i < event.getNumberOfComponents(); i++) {
components.append(String
.format("%d. %s %s",
i + 1,
getComponentDescription(event
.getComponentType(i)
.getStreamContent(), event
.getComponentType(i)
.getComponenetType(), event
.getComponentType(i)
.getLanguageCode()), "\n"));
}
eventComponents.setText(components);
if (isInfoExist) {
eventGenre.setText(convertGenreToString(event.getGenre()));
} else {
eventGenre.setText("");
tvGenre.setText("");
}
if (event.getGenre() == 1) {
buttonIMDBInfo.setVisibility(View.VISIBLE);
buttonIMDBInfo
.setOnClickListener(new IMDBButtonClickListener(
event.getName()));
} else {
buttonIMDBInfo.setVisibility(View.INVISIBLE);
}
if (event.getParentalRate() > 0) {
textViewParentalRate.setVisibility(View.VISIBLE);
textViewParentalRate.setText(String.valueOf(event
.getParentalRate()));
} else {
textViewParentalRate.setVisibility(View.INVISIBLE);
}
buttonNowNext.setText(R.string.next);
}
}
}
private class IMDBButtonClickListener implements
android.view.View.OnClickListener {
private String movieName;
public IMDBButtonClickListener(String movieName) {
this.movieName = movieName;
}
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
StringBuilder builder = new StringBuilder();
intent.setData(Uri.parse(builder
.append("http://www.imdb.com/find?q=").append(movieName)
.toString()));
EPGScheduleDialog.this.cancel();
EPGDialog epgDialog = MainActivity.activity.getDialogManager()
.getEpgDialog();
if (epgDialog != null) {
epgDialog.cancel();
}
try {
ctx.startActivity(intent);
MainActivity.activity.finish();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private class ButtonScheduleListener implements
android.view.View.OnClickListener {
@Override
public void onClick(View v) {
showAlertDialogForConfirmation(false);
}
}
/** OnClick listener for schedule reminder button */
private class ScheduleReminderOnCLickListener implements
android.view.View.OnClickListener {
@Override
public void onClick(View v) {
showAlertDialogForConfirmation(true);
}
}
private void showAlertDialogForConfirmation(final boolean isForReminder) {
alertDialog = new A4TVAlertDialog(ctx);
alertDialog.setNegativeButton(R.string.button_text_no,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.cancel();
}
});
// //////////////////////////////////////////
// For reminder
// //////////////////////////////////////////
if (isForReminder) {
alertDialog.setTitleOfAlertDialog(R.string.reminder_message_title);
alertDialog.setPositiveButton(R.string.button_text_yes,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
int isAdded = 0;
Log.d(TAG,
"SERVICE INDEX: " + event.getServiceIndex());
try {
Log.d(TAG,
"Number of components: "
+ event.getNumberOfComponents());
ReminderSmartParam param = new ReminderSmartParam(
event.getName(),
event.getDescription(), event
.getServiceIndex(), 0, event
.getEventId(), event
.getStartTime());
MainActivity.service.getReminderControl()
.createSmart(param);
Log.d(TAG,
"EPG EVENT WITH ID ADDED TO REMINDER: "
+ event.getEventId()
+ " ERROR CODE: " + isAdded
+ " DATE "
+ event.getStartTime() + " "
+ param.getTime());
} catch (Exception e) {
e.printStackTrace();
}
// TODO: catch exception
// if (isAdded ==
// ReminderErrorCode.REMINDER_LIST_FULL
// .ordinal()) {
// A4TVToast toast = new A4TVToast(ctx);
// toast.showToast(R.string.epg_reminder_error_list_full);
// } else if (isAdded ==
// ReminderErrorCode.CONFLICT_FOUND
// .ordinal()) {
// A4TVToast toast = new A4TVToast(ctx);
// toast.showToast(R.string.epg_reminder_error_exist);
// } else if (isAdded == ReminderErrorCode.NO_ERROR
// .ordinal()) {
// A4TVToast toast = new A4TVToast(ctx);
// toast.showToast(R.string.epg_reminder_added);
// } else {
// A4TVToast toast = new A4TVToast(ctx);
// toast.showToast(R.string.reminder_error);
// }
alertDialog.cancel();
}
});
}
// ///////////////////////////////////////
// For smart recording
// ///////////////////////////////////////
else {
alertDialog
.setTitleOfAlertDialog(R.string.smart_record_message_title);
alertDialog.setPositiveButton(R.string.button_text_yes,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
A4TVToast toast = new A4TVToast(getContext());
// int isAdded =
// PvrErrorCode.PVR_NO_ERROR.ordinal();
try {
// Schedule event recording
SmartCreateParams smartCreateParams = new SmartCreateParams(
event.getServiceIndex(), event
.getEventId(), event.getName(),
event.getDescription(), event
.getStartTime(), event
.getEndTime());
MainActivity.service.getPvrControl()
.createSmartRecord(smartCreateParams);
// stanislava
// if(!isAdded) {
// toast.showToast(R.string.smart_record_error);
// }
} catch (Exception e) {
toast.showToast(R.string.smart_record_error);
e.printStackTrace();
}
// if (isAdded ==
// PvrErrorCode.PVR_ERROR_RECORD_RESCHEDULE
// .ordinal()) {
//
// toast.showToast(R.string.epg_smart_record_error_reschedule);
//
// } else if (isAdded ==
// PvrErrorCode.PVR_ERROR_RECORD_CONFLICT_FOUND
// .ordinal()) {
//
// toast.showToast(R.string.epg_smart_record_error_conflit_found);
//
// } else if (isAdded == PvrErrorCode.PVR_NO_ERROR
// .ordinal()) {
//
// toast.showToast(R.string.epg_smart_record_added);
//
// } else {
//
// toast.showToast(R.string.smart_record_error);
// }
alertDialog.cancel();
}
});
}
alertDialog.show();
}
public void showDialogFromCallBack(int reminderHandle,
boolean startStopReminder) {
Log.d(TAG, "REMINDER CALL BACK ENTERED");
handlerForCallback.sendMessage(Message.obtain(handlerForCallback,
reminderHandle, startStopReminder));
}
// this is not needed here
@Override
public void returnArrayListsWithDialogContents(
ArrayList<ArrayList<Integer>> contentList,
ArrayList<ArrayList<Integer>> contentListIDs,
ArrayList<Integer> titleIDs) {
}
private String getComponentDescription(int streamContent,
int componentType, int languageInt) {
String componentDescriptor = ctx.getResources().getString(
R.string.component_type_unknown);
String language = "";
try {
language = MainActivity.service.getSystemControl()
.getLanguageAndKeyboardControl()
.convertTrigramsToLanguage(toASCII(languageInt), false);
} catch (RemoteException e) {
e.printStackTrace();
}
switch (streamContent) {
case 0x01: {
switch (componentType) {
case 0x01: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_video_4_3_aspect_ratio_25hz);
break;
}
case 0x02: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_video_16_9_aspect_ratio_with_pan_25hz);
break;
}
case 0x03: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_video_16_9_aspect_ratio_without_pan_25hz);
break;
}
case 0x04: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_video_16_9_aspect_ratio_25hz);
break;
}
case 0x05: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_video_4_3_aspect_ratio_30hz);
break;
}
case 0x06: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_video_16_9_aspect_ratio_with_pan_30hz);
break;
}
case 0x07: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_video_16_9_aspect_ratio_without_pan_30hz);
break;
}
case 0x08: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_video_16_9_aspect_ratio_30hz);
break;
}
case 0x09: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_hd_video_4_3_aspect_ratio_25hz);
break;
}
case 0x0A: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_hd_video_16_9_aspect_ratio_with_pan_25hz);
break;
}
case 0x0B: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_hd_video_16_9_aspect_ratio_without_pan_25hz);
break;
}
case 0x0C: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_hd_video_16_9_aspect_ratio_25hz);
break;
}
case 0x0D: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_hd_video_4_3_aspect_ratio_30hz);
break;
}
case 0x0E: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_hd_video_16_9_aspect_ratio_with_pan_30hz);
break;
}
case 0x0F: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_hd_video_16_9_aspect_ratio_without_pan_30hz);
break;
}
case 0x10: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg2_hd_video_16_9_aspect_ratio_30hz);
break;
}
default:
componentDescriptor = ctx.getResources().getString(
R.string.component_type_unknown);
break;
}
break;
}
case 0x02: {
switch (componentType) {
case 0x01: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg1_layer2_audio_single_mono);
break;
}
case 0x02: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg1_layer2_audio_dual_mono);
break;
}
case 0x03: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg1_layer2_audio_stereo);
break;
}
case 0x04: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg1_layer2_audio_multi);
break;
}
case 0x05: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg1_layer2_audio_surround);
break;
}
case 0x40: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg1_layer2_audio_visually_impaired);
break;
}
case 0x41: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg1_layer2_audio_hard_hearing);
break;
}
case 0x42: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_receiver_mixed_supplementary_audio);
break;
}
case 0x47: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg1_layer2_audio_receiver_mix);
break;
}
case 0x48: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_mpeg1_layer2_audio_broadcater_mix);
break;
}
default:
componentDescriptor = ctx.getResources().getString(
R.string.component_type_unknown);
break;
}
break;
}
case 0x03: {
switch (componentType) {
case 0x01: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_ebu_teletext_subtitles);
break;
}
case 0x02: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_associated_ebu_teletext);
break;
}
case 0x03: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_vbi_data);
break;
}
case 0x10: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_dvb_subtitles_normal_no_monitor_aspect_ratio);
break;
}
case 0x11: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_dvb_subtitles_normal_4_3_aspect_ratio_monitor);
break;
}
case 0x12: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_dvb_subtitles_normal_16_9_aspect_ratio_monitor);
break;
}
case 0x13: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_dvb_subtitles_normal_2_21_1_3_aspect_ratio_monitor);
break;
}
case 0x14: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_dvb_subtitles_normal_hd_monitor);
break;
}
case 0x20: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_dvb_subtitles_hard_of_hearing_no_monitor_aspect_ratio);
break;
}
case 0x21: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_dvb_subtitles_hard_of_hearing_4_3_aspect_ratio_monitor);
break;
}
case 0x22: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_dvb_subtitles_hard_of_hearing_16_9_aspect_ratio_monitor);
break;
}
case 0x23: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_dvb_subtitles_hard_of_hearing_2_21_1_3_aspect_ratio_monitor);
break;
}
case 0x24: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_dvb_subtitles_hard_of_hearing_hd_monitor);
break;
}
case 0x30: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_open_sign_language);
break;
}
case 0x31: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_closed_sign_language);
break;
}
case 0x40: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_video_up_sampled);
break;
}
default:
componentDescriptor = ctx.getResources().getString(
R.string.component_type_unknown);
break;
}
break;
}
case 0x04: {
if (componentType > 0x00 && componentType < 0x7F) {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_ac3_audio_mode);
} else if (componentType > 0x80 && componentType < 0xFF) {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_enhanced_ac3_audio_mode);
} else {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_unknown);
}
break;
}
case 0x05: {
switch (componentType) {
case 0x01: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_h264_avc_sd_video_4_3_aspect_ratio_25hz);
break;
}
case 0x03: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_h264_avc_sd_video_16_9_aspect_ratio_25hz);
break;
}
case 0x04: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_h264_avc_sd_video_aspect_ratio_25hz);
break;
}
case 0x05: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_h264_avc_sd_video_4_3_aspect_ratio_30hz);
break;
}
case 0x07: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_h264_avc_sd_video_16_9_aspect_ratio_30hz);
break;
}
case 0x08: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_h264_avc_sd_video_aspect_ratio_30hz);
break;
}
case 0x0B: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_h264_avc_hd_video_16_9_aspect_ratio_25hz);
break;
}
case 0x0C: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_h264_avc_hd_video_aspect_ratio_25hz);
break;
}
case 0x0F: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_h264_avc_hd_video_16_9_aspect_ratio_30hz);
break;
}
case 0x10: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_h264_avc_hd_video_aspect_ratio_30hz);
break;
}
default:
componentDescriptor = ctx.getResources().getString(
R.string.component_type_unknown);
break;
}
break;
}
case 0x06: {
switch (componentType) {
case 0x01: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_he_aac_single_mono);
break;
}
case 0x03: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_he_aac_stereo);
break;
}
case 0x05: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_he_aac_surround_sound);
break;
}
case 0x40: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_he_aac_visually_impaired);
break;
}
case 0x41: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_he_aac_hard_of_hearing);
break;
}
case 0x42: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_he_aac_supplementary_audio);
break;
}
case 0x43: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_he_aac_v2_stereo);
break;
}
case 0x44: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_he_aac_v2_visually_impaired);
break;
}
case 0x45: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_he_aac_v2_hard_of_hearing);
break;
}
case 0x46: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_he_aac_v2_supplementary_audio);
break;
}
case 0x47: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_he_aac_receiver_mix);
break;
}
case 0x48: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_he_aac_broadcaster_mix);
break;
}
case 0x49: {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_he_aac_v2_receiver_mix);
break;
}
case 0x4A: {
componentDescriptor = ctx
.getResources()
.getString(
R.string.component_type_he_aac_v2_broadcaster_mix);
break;
}
default:
componentDescriptor = ctx.getResources().getString(
R.string.component_type_unknown);
break;
}
break;
}
case 0x07: {
if (componentType > 0x00 && componentType < 0x7F) {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_dts_audio_modes);
} else {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_unknown);
}
break;
}
case 0x08: {
if (componentType == 0x01) {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_dvb_srm_data);
} else if (componentType > 0x02 && componentType < 0xFF) {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_dvb_cpcm_modes);
} else {
componentDescriptor = ctx.getResources().getString(
R.string.component_type_unknown);
}
break;
}
}
return String.format("%s %s %s", componentDescriptor, ctx
.getResources().getString(R.string.component_type_language),
language);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_INFO: {
Log.i(TAG, "Do nothing while EPG Extended dialog is active!");
return true;
}
default:
break;
}
return super.onKeyDown(keyCode, event);
}
private String convertGenreToString(int genre) {
String genreString = "";
switch (genre) {
case 0x1:
genreString = ctx.getResources().getString(
R.string.genre_movie_drama);
break;
case 0x2:
genreString = ctx.getResources().getString(
R.string.genre_news_current_affairs);
break;
case 0x3:
genreString = ctx.getResources().getString(
R.string.genre_show_game_show);
break;
case 0x4:
genreString = ctx.getResources().getString(
R.string.genre_sports);
break;
case 0x5:
genreString = ctx.getResources().getString(
R.string.genre_children_youth_programmes);
break;
case 0x6:
genreString = ctx.getResources().getString(
R.string.genre_music_ballet_dance);
break;
case 0x7:
genreString = ctx.getResources().getString(
R.string.genre_arts_culture);
break;
case 0x8:
genreString = ctx.getResources().getString(
R.string.genre_social_political_issues);
break;
case 0x9:
genreString = ctx.getResources().getString(
R.string.genre_education_science);
break;
case 0xA:
genreString = ctx.getResources().getString(
R.string.genre_leisure_hobbies);
break;
default:
genreString = "";
break;
}
return genreString;
}
}