package com.iwedia.gui.keyhandlers;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.RemoteException;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import com.iwedia.comm.content.Content;
import com.iwedia.comm.content.IContentListControl;
import com.iwedia.comm.content.service.ServiceContent;
import com.iwedia.comm.enums.FilterType;
import com.iwedia.comm.teletext.TeletextMode;
import com.iwedia.dtv.service.SourceType;
import com.iwedia.dtv.sound.AudioChannelMode;
import com.iwedia.dtv.types.AspectRatioMode;
import com.iwedia.dtv.types.UserControl;
import com.iwedia.gui.MainActivity;
import com.iwedia.gui.R;
import com.iwedia.gui.components.A4TVAlertDialog;
import com.iwedia.gui.components.A4TVProgressBarPVR;
import com.iwedia.gui.components.A4TVProgressBarPVR.ControlProviderPVR;
import com.iwedia.gui.components.A4TVToast;
import com.iwedia.gui.components.dialogs.AudioLanguageDialog;
import com.iwedia.gui.components.dialogs.PictureSettingsDialog;
import com.iwedia.gui.components.dialogs.SubtitleLanguageDialog;
import com.iwedia.gui.config_handler.ConfigHandler;
import com.iwedia.gui.content_list.ContentListHandler;
import com.iwedia.gui.listeners.MainKeyListener;
import com.iwedia.gui.osd.IOSDHandler;
import com.iwedia.gui.osd.OSDGlobal;
import com.iwedia.gui.osd.OSDHandlerHelper;
import com.iwedia.gui.osd.infobanner.InfoBannerHandler;
import com.iwedia.gui.osd.noneinfobanner.NoneBannerHandler;
import com.iwedia.gui.pvr.PVRHandler;
import java.util.Timer;
public class CleanScreenKeyHandler extends AppStateKeyHandler {
private final String LOG_TAG = "CleanScreenKeyHandler";
private MainActivity activity;
private Timer t = null;
// TODO: Applies only on main display
private int mDisplayId = 0;
private int err = 0;
private boolean tempTxt = true;
private int countTxt = 0;
private Content previousContent;
public CleanScreenKeyHandler(MainActivity activity) {
this.activity = activity;
}
public boolean onKeyPressed(View v, DialogInterface dialog, int keyCode,
KeyEvent event, boolean isFromMheg) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
// ///////////////////////////////////////////////////////
// Should hbb handle key
// ///////////////////////////////////////////////////////
if (hbbKeyHandler(keyCode)) {
Log.d(TAG, "Key sent to WebView!!");
MainActivity.webDialog.onKeyDown(keyCode, event);
return true;
}
// ///////////////////////////////////////////////////////
// Should mheg handle key
// ///////////////////////////////////////////////////////
// if(mhegKeyHandler(keyCode)) {
if (!ConfigHandler.ATSC) {
try {
if (MainActivity.service.getMhegControl().sendInputControl(
keyCode, UserControl.PRESSED)) {
return true;
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
// }
Log.d(LOG_TAG, "KeyCode: " + keyCode);
switch (keyCode) {
// ////////////////////////////////
// PIP
// ////////////////////////////////
case KeyEvent.KEYCODE_PROG_YELLOW:
case KeyEvent.KEYCODE_Y: {
// Get active content object and stop secondary display
// playback
Log.d(TAG, "YELLOW KEY ");
if (MainActivity.activity.getDualVideoManager().isPiP()) {
MainActivity.activity.getDualVideoManager().stop(
MainActivity.SECONDARY_DISPLAY_UNIT_ID);
return true;
}
// TODO: move to dualVideoManager
// check if renderer
if (MainActivity.activity.getPrimaryMultimediaVideoView() != null) {
if (MainActivity.activity.getRendererController()
.getmRendererState() != 0) {
MainActivity.activity.getRendererController()
.stop();
} else {
if (MainActivity.activity.getMultimediaMode() == MainActivity.MULTIMEDIA_PIP)
MainActivity.activity
.stopMultimediaVideo(MainActivity.MULTIMEDIA_PIP);
}
return true;
}
return false;
}
// ////////////////////////////////
// PAP
// ////////////////////////////////
case KeyEvent.KEYCODE_PROG_BLUE:
case KeyEvent.KEYCODE_B: {
Log.d(TAG, "BLUE KEY ");
if (MainActivity.activity.getDualVideoManager().isPaP()) {
if (MainActivity.activity.getDualVideoManager().stop(
MainActivity.SECONDARY_DISPLAY_UNIT_ID)) {
return true;
}
}
// TODO: move to dualVideoManager
// check if renderer
Log.d(TAG, "IS pap returned false - check if renderer ... ");
if (MainActivity.activity.getPrimaryMultimediaVideoView() != null) {
if (MainActivity.activity.getRendererController()
.getmRendererState() != 0) {
MainActivity.activity.getRendererController()
.stop();
} else {
if (MainActivity.activity.getMultimediaMode() == MainActivity.MULTIMEDIA_PAP)
MainActivity.activity
.stopMultimediaVideo(MainActivity.MULTIMEDIA_PAP);
}
return true;
}
return false;
}
// /////////////////////////////////////
// CONTENT LIST
// /////////////////////////////////////
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER: {
if (MainActivity.activity.getPageCurl().getCurrentState() == STATE_CHANNEL_INFO) {
activity.getPageCurl().getExtendedInfo();
} else {
// Check if content list is initialized
if (activity.getContentListHandler() == null) {
activity.initContentList();
}
// Show content list dialog
activity.getContentListHandler().showContentList();
// Filter current filter
activity.getContentListHandler().filterContent(
ContentListHandler.CONTENT_LIST_LAST_FILTER,
true);
// Set flag to false
MainKeyListener.contentListFromMainMenu = false;
}
return true;
}
// ///////////////////////////////////////////////////
// PVR
// ///////////////////////////////////////////////////
case KeyEvent.KEYCODE_F12:
case KeyEvent.KEYCODE_MEDIA_RECORD: {
// Check config file
if (ConfigHandler.PVR) {
if (OSDHandlerHelper.isServiceListEmpty()) {
A4TVToast toast = new A4TVToast(activity);
toast.showToast(R.string.empty_list);
} else {
boolean pvrRecordEnabled = false;
// Check which storage is used
if (ConfigHandler.PVR_STORAGE_STRING
.equalsIgnoreCase(ConfigHandler.USB_TEXT)) {
// Check if usb is attached
if (PVRHandler.detectUSB()) {
// Enable pvr recording
pvrRecordEnabled = true;
} else {
// Disable pvr recording and show message
pvrRecordEnabled = false;
// No usb drive
A4TVToast toast = new A4TVToast(activity);
toast.showToast(R.string.pvr_no_usb);
}
} else {
// Enable pvr recording for nand memory
pvrRecordEnabled = true;
}
// Check if feature is enabled
if (pvrRecordEnabled) {
ControlProviderPVR.setFileDescription(activity
.getApplicationContext().getString(
R.string.prepare_record));
A4TVProgressBarPVR.getControlProviderPVR()
.record();
activity.getPageCurl().multimediaControllerPVR(
false);
}
}
} else {
A4TVToast toast = new A4TVToast(activity);
toast.showToast(R.string.pvr_disabled);
}
return true;
}
case 126:
case 127:
case KeyEvent.KEYCODE_F11:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: {
// Check config file
if (ConfigHandler.TIMESHIFT) {
if (OSDHandlerHelper.isServiceListEmpty()) {
A4TVToast toast = new A4TVToast(activity);
toast.showToast(R.string.empty_list);
} else {
boolean timeShiftEnabled = false;
// Check if timeshift is enabled
if (ConfigHandler.PVR_STORAGE_STRING
.equalsIgnoreCase(ConfigHandler.USB_TEXT)) {
// Check if usb is attached
if (PVRHandler.detectUSB()) {
// Enable feature
timeShiftEnabled = true;
} else {
timeShiftEnabled = false;
// No usb drive
A4TVToast toast = new A4TVToast(activity);
toast.showToast(R.string.pvr_no_usb);
}
} else {
// Enable feature if nand is used
timeShiftEnabled = true;
}
// Check if feature is enabled
if (timeShiftEnabled) {
Log.d(TAG, "Start timeshift!");
ControlProviderPVR.setFileDescription(activity
.getApplicationContext().getString(
R.string.prepare_timeshift));
A4TVProgressBarPVR.getControlProviderPVR()
.pause();
activity.getPageCurl().multimediaControllerPVR(
false);
}
}
} else {
A4TVToast toast = new A4TVToast(activity);
toast.showToast(R.string.timeshift_disabled);
}
return true;
}
// ///////////////////////////////////////////////////
// EPG
// ///////////////////////////////////////////////////
case KeyEvent.KEYCODE_E:
case KeyEvent.KEYCODE_GUIDE:
case KeyEvent.KEYCODE_PROG_GREEN:
case KeyEvent.KEYCODE_SEARCH: {
if (0 != (MainActivity.getKeySet())) {
int command = 0;
String param = "EXIT";
try {
MainActivity.service.getHbbTvControl()
.notifyAppMngr(command, param);
} catch (RemoteException e) {
e.printStackTrace();
}
}
// check if reminder is for current channel
Content content = null;
try {
content = MainActivity.service.getContentListControl()
.getActiveContent(mDisplayId);
} catch (Exception e) {
e.printStackTrace();
}
if (content != null) {
if (content instanceof ServiceContent) {
if (activity.getEpgHandler() == null) {
activity.initEPG();
}
activity.getEpgHandler().showEPGDialog();
break;
} else {
A4TVToast toast = new A4TVToast(activity);
toast.showToast(com.iwedia.gui.R.string.epg_not_supported);
}
}
}
// ///////////////////////////////////////////////////
// Left and Right keys
// ///////////////////////////////////////////////////
case KeyEvent.KEYCODE_DPAD_RIGHT: {
if (OSDHandlerHelper.getHandlerState() != STATE_INFO_BANNER_SHOWN
|| (OSDHandlerHelper.getHandlerState() == STATE_INFO_BANNER_SHOWN
&& activity.getPageCurl() instanceof InfoBannerHandler && !InfoBannerHandler.description)
|| activity.getPageCurl() instanceof NoneBannerHandler) {
activity.getPageCurl().getNextChannelInfo();
} else {
activity.getPageCurl().updateChannelInfo(1);
}
return true;
}
case KeyEvent.KEYCODE_DPAD_LEFT: {
if (OSDHandlerHelper.getHandlerState() != STATE_INFO_BANNER_SHOWN
|| (OSDHandlerHelper.getHandlerState() == STATE_INFO_BANNER_SHOWN
&& activity.getPageCurl() instanceof InfoBannerHandler && !InfoBannerHandler.description)
|| activity.getPageCurl() instanceof NoneBannerHandler) {
activity.getPageCurl().getPreviousChannelInfo();
} else {
activity.getPageCurl().updateChannelInfo(-1);
}
return true;
}
// ///////////////////////////////////////////////
// CHANNEL UP
// ///////////////////////////////////////////////
case KeyEvent.KEYCODE_CHANNEL_UP:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_F4: {
if (OSDHandlerHelper.getHandlerState() != STATE_INFO_BANNER_SHOWN
|| (OSDHandlerHelper.getHandlerState() == STATE_INFO_BANNER_SHOWN
&& activity.getPageCurl() instanceof InfoBannerHandler && !InfoBannerHandler.description)
|| activity.getPageCurl() instanceof NoneBannerHandler) {
try {
if (FilterType.INPUTS == MainActivity.service
.getContentListControl()
.getActiveContent(0).getFilterType()) {
A4TVToast toast = new A4TVToast(activity);
toast.showToast(R.string.not_supported_action_for_input);
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
if (!activity.dualVideoActionHandler(CHANNEL_UP, 0)) {
return true;
}
activity.getMainKeyListener().changeChannelUp();
} else {
activity.getPageCurl().scroll(1);
}
return true;
}
// ///////////////////////////////////////////////////
// CHANNEL DOWN
// ///////////////////////////////////////////////////
case KeyEvent.KEYCODE_CHANNEL_DOWN:
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_F3: {
if (OSDHandlerHelper.getHandlerState() != STATE_INFO_BANNER_SHOWN
|| (OSDHandlerHelper.getHandlerState() == STATE_INFO_BANNER_SHOWN
&& activity.getPageCurl() instanceof InfoBannerHandler && !InfoBannerHandler.description)
|| activity.getPageCurl() instanceof NoneBannerHandler) {
try {
if (FilterType.INPUTS == MainActivity.service
.getContentListControl()
.getActiveContent(0).getFilterType()) {
A4TVToast toast = new A4TVToast(activity);
toast.showToast(R.string.not_supported_action_for_input);
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
if (!activity.dualVideoActionHandler(CHANNEL_DOWN, 0)) {
return true;
}
activity.getMainKeyListener().changeChannelDown();
} else {
activity.getPageCurl().scroll(-1);
}
return true;
}
// ////////////////////////////////////////////////////
// CHANNEL CIRCULAR
// ////////////////////////////////////////////////////
case KeyEvent.KEYCODE_F9: {
A4TVToast toast = new A4TVToast(activity);
toast.showToast(R.string.swich_to_previous_content);
if (!activity.dualVideoActionHandler(
CHANNEL_TOGGLE_PREVIOUS, 0)) {
return true;
}
try {
Content activeContent = MainActivity.service
.getContentListControl().getActiveContent(0);
previousContent = MainActivity.service
.getContentListControl().getPreviousContent();
if (activeContent.getFilterType() == FilterType.INPUTS) {
/* Stop active input */
MainActivity.service.getContentListControl()
.stopContent(activeContent, 0);
if (previousContent.getFilterType() != FilterType.INPUTS) {
if (previousContent.isSelectable() == true) {
// Start curl animation
((MainActivity) activity).getPageCurl()
.changeChannelByContent(
previousContent, 0);
} else {
toast = new A4TVToast(activity);
toast.showToast("Not selectable content");
}
return true;
}
((MainActivity) activity)
.setAnalogSignalLock(false);
}
if (previousContent.getFilterType() == FilterType.INPUTS) {
boolean isDisabled = false;
try {
isDisabled = MainActivity.service
.getContentListControl()
.getContentLockedStatus(previousContent);
} catch (RemoteException e1) {
e1.printStackTrace();
}
if (isDisabled == false) {
if (activeContent.getFilterType() != FilterType.INPUTS) {
/* Stop active input */
MainActivity.service
.getContentListControl()
.stopContent(activeContent, 0);
}
if (activeContent.getSourceType() != SourceType.ANALOG
&& activeContent.getFilterType() != FilterType.INPUTS
&& previousContent.getSourceType() == SourceType.ANALOG) {
/*
* Remove WebView from screen and set key
* mask to 0
*/
if (0 != (MainActivity.getKeySet())) {
try {
if (!activity
.isHbbTVInHTTPPlaybackMode()) {
activity.webDialog
.getHbbTVView()
.setAlpha((float) 0.00);
MainActivity.setKeySet(0);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
((MainActivity) activity).sourceSwichingProgressDialog
.show();
new Thread(new Runnable() {
@Override
public void run() {
try {
err = MainActivity.service
.getContentListControl()
.goContent(previousContent,
0);
} catch (Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
activity.runOnUiThread(new Runnable() {
public void run() {
((MainActivity) activity).sourceSwichingProgressDialog
.cancel();
if (((MainActivity) activity)
.getIsAnalogSignalLocked() == false) {
MainActivity.activity
.getCheckServiceType()
.showNoSignalLayout();
}
}
});
}
}).start();
} else {
toast.showToast(R.string.previous_input_is_disabled);
}
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
activity.getMainKeyListener().changeChannelTogglePrevious();
return true;
}
// /////////////////////////////////////////////////////
// INFO BANNER
// //////////////////////////////////////////////////////
case KeyEvent.KEYCODE_SPACE:
case KeyEvent.KEYCODE_INFO: {
// if (MainActivity.activity.getPageCurl().getCurrentState()
// == STATE_NUMEROUS_CHANGE_CHANNEL) {
// // ForceChangeChannel
// activity.getPageCurl().startCurlEffect(
// SCENARIO_DO_NOTHING);
// } else
if (MainActivity.activity.getPageCurl().getCurrentState() == STATE_CHANNEL_INFO) {
activity.getPageCurl().info();
} else {
activity.getPageCurl().info();
}
return true;
}
// ///////////////////////////////////////////////////////////////////
// VOLUME UP
// ///////////////////////////////////////////////////////////////////
case KeyEvent.KEYCODE_F8:
case KeyEvent.KEYCODE_VOLUME_UP: {
IOSDHandler curlHandler = activity.getPageCurl();
curlHandler.volume(VOLUME_UP, true);
return true;
}
// ///////////////////////////////////////////////////////////////////
// VOLUME DOWN
// ///////////////////////////////////////////////////////////////////
case KeyEvent.KEYCODE_F7:
case KeyEvent.KEYCODE_VOLUME_DOWN: {
IOSDHandler curlHandler = activity.getPageCurl();
curlHandler.volume(VOLUME_DOWN, true);
return true;
}
// ///////////////////////////////////////////////////////////////////
// VOLUME MUTE
// ///////////////////////////////////////////////////////////////////
case KeyEvent.KEYCODE_MUTE: {
IOSDHandler curlHandler = activity.getPageCurl();
curlHandler.volume(VOLUME_MUTE, true);
return true;
}
// //////////////////////////////////////////////////////////////////////
// NUMBER TASTERS FOR CHANNEL CHANGE
// //////////////////////////////////////////////////////////////////////
case KeyEvent.KEYCODE_0:
case KeyEvent.KEYCODE_1:
case KeyEvent.KEYCODE_2:
case KeyEvent.KEYCODE_3:
case KeyEvent.KEYCODE_4:
case KeyEvent.KEYCODE_5:
case KeyEvent.KEYCODE_6:
case KeyEvent.KEYCODE_7:
case KeyEvent.KEYCODE_8:
case KeyEvent.KEYCODE_9:
case KeyEvent.KEYCODE_F10: {
IOSDHandler curlHandler = activity.getPageCurl();
curlHandler.changeChannelByNum(activity
.getMainKeyListener()
.generateChannelNumber(keyCode), mDisplayId);
return true;
}
// ///////////////////////////////////////////////////////////////////////
// MAIN MENU
// ////////////////////////////////////////////////////////////////////////
case KeyEvent.KEYCODE_TAB:
case KeyEvent.KEYCODE_MENU: {
if (MainKeyListener.enableKeyCodeMenu) {
// // Show main menu
// If main menu isn't created create it
if (activity.getMainMenuHandler() == null) {
activity.initMainMenu();
}
if (activity.getMainMenuHandler().getMainMenuDialog()
.isShowing()) {
activity.getMainMenuHandler()
.getA4TVOnSelectLister()
.clearAnimationsManual();
activity.getMainMenuHandler().closeMainMenu(true);
} else {
// Show main menu
activity.getMainMenuHandler().showMainMenu();
}
}
return true;
}
// ////////////////////////////////////////////////////////////////////
// EXIT
// ////////////////////////////////////////////////////////////////////
case KeyEvent.KEYCODE_DEL:
case KeyEvent.KEYCODE_BACK: {
if (MainKeyListener.enableKeyCodeBack) {
// //////////////////////////////////
// Info banner bug fix
// ////////////////////////////////////
if (MainActivity.activity.getPageCurl()
.getCurrentState() == STATE_CHANNEL_INFO) {
activity.getPageCurl().info();
// return true;
}
}
if ((MainKeyListener.enableKeyCodeBack || MainActivity.service == null)
&& (MainActivity.activity.getPageCurl()
.getCurrentState() == STATE_INIT || MainActivity.activity
.getPageCurl().getCurrentState() == STATE_OFF)) {
final A4TVAlertDialog askDialog = new A4TVAlertDialog(
activity);
askDialog.setTitleOfAlertDialog(R.string.exit_massage)
.setCancelable(false);
askDialog.setPositiveButton(R.string.button_text_yes,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
Thread killerThread = new Thread(
new Runnable() {
@Override
public void run() {
activity.finish();
}
});
killerThread.start();
askDialog.cancel();
}
});
askDialog.setNegativeButton(R.string.button_text_no,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
askDialog.cancel();
}
});
askDialog.show();
}
return true;
}
// ////////////////////////////////////////////////////////////////////
// SUBTITLES
// ////////////////////////////////////////////////////////////////////
case KeyEvent.KEYCODE_CAPTIONS:
case KeyEvent.KEYCODE_S:
case KeyEvent.KEYCODE_F1: {
showSubtitle();
return true;
}
// ////////////////////////////////////////////////////////////////////
// TELETEXT
// ////////////////////////////////////////////////////////////////////
case KeyEvent.KEYCODE_F5:
case KeyEvent.KEYCODE_F2: {
showTeletext();
return true;
}
// /////////////////////////////////////
// Dialog for Available audio languages
// /////////////////////////////////////
case KeyEvent.KEYCODE_F6: {
showAudio();
return true;
}
// /////////////////////////////////////////////////
// Quick menu feature
// /////////////////////////////////////////////////
// /////////////////////////////////////////////////
// Source list shortcut
// /////////////////////////////////////////////////
case KeyEvent.KEYCODE_I:
case KeyEvent.KEYCODE_TV_INPUT: {
// Check if content list is initialized
if (activity.getContentListHandler() == null) {
activity.initContentList();
}
// Show content list dialog
activity.getContentListHandler().showContentList();
// Filter current filter
activity.getContentListHandler().filterContent(
FilterType.INPUTS, true);
// Set flag to false
MainKeyListener.contentListFromMainMenu = false;
break;
}
// /////////////////////////////////////////////////
// Browser shortcut
// /////////////////////////////////////////////////
case KeyEvent.KEYCODE_SETTINGS: {
Intent browserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://www.google.rs"));
activity.startActivity(browserIntent);
break;
}
case KeyEvent.KEYCODE_WINDOW: {
if (1 < (MainActivity.getKeySet())) {
Log.d(TAG,
"Aspect ratio cannot be changed when HbbTV application registers key mask greater than 1!");
return true;
}
PictureFormatHandler pictureFormatHandler = new PictureFormatHandler();
IOSDHandler curlHandler = activity.getPageCurl();
int curlHandlerState = curlHandler.getCurrentState();
int currentInputGroup = PictureSettingsDialog
.getCurrentInputTypeGroup(0 /* display id */);
if (currentInputGroup != -1) {
if (curlHandlerState == OSDGlobal.STATE_PICTURE_FORMAT) { // move
// to
// next
// format
if (pictureFormatHandler
.moveToNextFormat(currentInputGroup) == -1) {
Log.e(TAG, "Aspect ratio failed to switch.");
}
curlHandler.showPictureFormat(pictureFormatHandler
.currentFormatToString());
} else { // just show current format
curlHandler.showPictureFormat(pictureFormatHandler
.currentFormatToString());
}
} else {
Log.w(TAG, "No picture format for active input.");
}
break;
}
case KeyEvent.KEYCODE_ESCAPE: {
if (0 != (MainActivity.getKeySet())) {
int command = 0;
String param = "EXIT";
try {
if (MainActivity.service.getHbbTvControl()
.notifyAppMngr(command, param)) {
MainActivity.webDialog.getHbbTVView().setAlpha(
(float) 0.00);
MainActivity.setKeySet(0);
return true;
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
default: {
Log.d(TAG, "default returned true");
return true;
}
}// switch
return false;
}
return false;
}
/**
* Show Teletext Dialog.
*/
public void showTeletext() {
Log.d(TAG, "KEYCODE_F2 - TELETEXT");
int command = 1;
String param = "txt_key";
int command1 = 2;
String param1 = "txt_key1";
try {
if (false == (MainActivity.service.getHbbTvControl().notifyAppMngr(
command, param))) {
if (tempTxt) {
param1 = "1";
if (1 < (MainActivity.getKeySet())) {
return;
}
tempTxt = false;
if (false == (MainActivity.service.getHbbTvControl()
.notifyAppMngr(command1, param1))) {
return;
}
} else {
param1 = "0";
MainActivity.service.getHbbTvControl().notifyAppMngr(
command1, param1);
tempTxt = true;
}
}
} catch (RemoteException e) {
e.printStackTrace();
}
try {
IContentListControl contentListControl = MainActivity.service
.getContentListControl();
if ((null != contentListControl
.getActiveContent(((MainActivity) activity).SECONDARY_DISPLAY_UNIT_ID))
&& (((MainActivity) activity).PAP_MODE == ((MainActivity) activity)
.getSecondaryVideoViewState())) {
return;
}
} catch (Exception e) {
e.printStackTrace();
}
MainActivity.activity.getTeletextDialogView()
.show(TeletextMode.FULL, 0);
}
/**
* Show Subtitle Dialog.
*/
public void showSubtitle() {
try {
IContentListControl contentListControl = MainActivity.service
.getContentListControl();
if ((null != contentListControl
.getActiveContent(((MainActivity) activity).SECONDARY_DISPLAY_UNIT_ID))
&& (((MainActivity) activity).PAP_MODE == ((MainActivity) activity)
.getSecondaryVideoViewState())) {
return;
}
SubtitleLanguageDialog subLanguageDialog = activity
.getDialogManager().getSubtitleLanguageDialog();
if (subLanguageDialog != null)
if (subLanguageDialog.isShowing()) {
subLanguageDialog.cancel();
} else {
subLanguageDialog.show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Show Audio Dialog.
*/
public void showAudio() {
Content content = null;
AudioChannelMode mode = AudioChannelMode.SINGLE_MONO;
A4TVToast toast = new A4TVToast(activity);
try {
content = MainActivity.service.getContentListControl()
.getActiveContent(mDisplayId);
} catch (Exception e) {
e.printStackTrace();
}
if (content != null) {
if (content.getSourceType() == SourceType.ANALOG) {
try {
MainActivity.service.getSystemControl().getSoundControl()
.setAudioChannelMode(mode);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
mode = MainActivity.service.getSystemControl()
.getSoundControl().getAudioChannelMode();
} catch (RemoteException e) {
e.printStackTrace();
}
switch (mode) {
case STEREO:
toast.showToast(com.iwedia.gui.R.string.tv_menu_sound_mode_stereo);
break;
case SINGLE_MONO:
toast.showToast(com.iwedia.gui.R.string.tv_menu_sound_mode_single_mono);
break;
case DUAL_MONO:
toast.showToast(com.iwedia.gui.R.string.tv_menu_sound_dual_mono);
break;
case SAP:
toast.showToast(com.iwedia.gui.R.string.tv_menu_sound_sap);
break;
default:
break;
}
} else {
AudioLanguageDialog audioLangDialog = activity
.getDialogManager().getAudioLanguageDialog();
if (audioLangDialog != null)
if (audioLangDialog.isShowing()) {
audioLangDialog.cancel();
} else {
audioLangDialog.show();
}
}
}
}
/**
* HbbTV key handling function
*
* @param keyCode
* @return
*/
public boolean hbbKeyHandler(int keyCode) {
final int RED_KEY = 1;
final int GREEN_KEY = 2;
final int YELLOW_KEY = 4;
final int BLUE_KEY = 8;
final int NAVIGATION = 16;
final int VCR = 32;
final int NUMERIC = 256;
Log.d(TAG, "HbbTV keyset mask value = " + MainActivity.getKeySet());
switch (keyCode) {
case KeyEvent.KEYCODE_PROG_RED: {
if (0 != (RED_KEY & MainActivity.getKeySet())) {
return true;
}
}
break;
case KeyEvent.KEYCODE_PROG_GREEN: {
if (0 != (GREEN_KEY & MainActivity.getKeySet())) {
return true;
}
}
break;
case KeyEvent.KEYCODE_PROG_YELLOW: {
if (0 != (YELLOW_KEY & MainActivity.getKeySet())) {
return true;
}
}
break;
case KeyEvent.KEYCODE_PROG_BLUE: {
if (0 != (BLUE_KEY & MainActivity.getKeySet())) {
return true;
}
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER: {
// case KeyEvent.KEYCODE_BACK: { // TODO: TEMPORARY COMMENTED!!
if (0 != (NAVIGATION & MainActivity.getKeySet())) {
return true;
}
}
break;
// TODO: TEMPORARY HERE!! WILL BE MOVED!!
case KeyEvent.KEYCODE_BACK: {
if (0 != (MainActivity.getKeySet())) {
int command = 0;
String param = "EXIT";
try {
if (MainActivity.service.getHbbTvControl()
.notifyAppMngr(command, param)) {
return true;
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
break;
case KeyEvent.KEYCODE_MEDIA_PLAY:
case KeyEvent.KEYCODE_MEDIA_PAUSE:
case KeyEvent.KEYCODE_MEDIA_STOP:
case KeyEvent.KEYCODE_MEDIA_NEXT:
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
case KeyEvent.KEYCODE_FORWARD:
case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
case KeyEvent.KEYCODE_MEDIA_REWIND:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: {
if (0 != (VCR & MainActivity.getKeySet())) {
return true;
}
}
break;
case KeyEvent.KEYCODE_0:
case KeyEvent.KEYCODE_1:
case KeyEvent.KEYCODE_2:
case KeyEvent.KEYCODE_3:
case KeyEvent.KEYCODE_4:
case KeyEvent.KEYCODE_5:
case KeyEvent.KEYCODE_6:
case KeyEvent.KEYCODE_7:
case KeyEvent.KEYCODE_8:
case KeyEvent.KEYCODE_9: {
if (0 != (NUMERIC & MainActivity.getKeySet())) {
return true;
}
}
break;
/* Following RC keys are disabled during HbbTV HTTP playback */
// Aspect ratio
case KeyEvent.KEYCODE_WINDOW:
// Source list
case KeyEvent.KEYCODE_TV_INPUT:
case KeyEvent.KEYCODE_I:
// Audio tracks switching
case KeyEvent.KEYCODE_F6:
// Txt
case KeyEvent.KEYCODE_F5:
case KeyEvent.KEYCODE_F2:
// Subs
case KeyEvent.KEYCODE_CAPTIONS:
case KeyEvent.KEYCODE_S:
case KeyEvent.KEYCODE_F1:
// Info menu
case KeyEvent.KEYCODE_SPACE:
case KeyEvent.KEYCODE_INFO:
// Channel zapping
case KeyEvent.KEYCODE_F9:
case KeyEvent.KEYCODE_CHANNEL_UP:
case KeyEvent.KEYCODE_CHANNEL_DOWN:
case KeyEvent.KEYCODE_F4:
case KeyEvent.KEYCODE_F3:
// Epg
case KeyEvent.KEYCODE_E:
case KeyEvent.KEYCODE_GUIDE:
case KeyEvent.KEYCODE_SEARCH:
// Pvr
case KeyEvent.KEYCODE_F12:
case KeyEvent.KEYCODE_MEDIA_RECORD: {
if (activity.isHbbTVInHTTPPlaybackMode()) {
return true;
}
}
break;
default:
break;
}
return false;
}
/**
* Mheg key handling function
*
* @param keyCode
* @return
*/
public boolean mhegKeyHandler(int keyCode) {
final int MHEG_MASK_UP = 0x00000001;
final int MHEG_MASK_DOWN = 0x00000002;
final int MHEG_MASK_LEFT = 0x00000004;
final int MHEG_MASK_RIGHT = 0x00000008;
final int MHEG_MASK_DIGIT = 0x00000010;
final int MHEG_MASK_SELECT = 0x00000020;
final int MHEG_MASK_CALCEL = 0x00000040;
final int MHEG_MASK_RED = 0x00000100;
final int MHEG_MASK_GREEN = 0x00000200;
final int MHEG_MASK_YELLOW = 0x00000400;
final int MHEG_MASK_BLUE = 0x00000800;
final int MHEG_MASK_TEXT = 0x00001000;
final int MHEG_MASK_INFO = 0x00002000;
final int MHEG_MASK_STOP = 0x00004000;
final int MHEG_MASK_PLAY = 0x00008000;
final int MHEG_MASK_PAUSE = 0x00010000;
final int MHEG_MASK_SKIP_FORWARD = 0x00020000;
final int MHEG_MASK_SKIP_BACK = 0x00040000;
final int MHEG_MASK_FAST_FORWARD = 0x00080000;
final int MHEG_MASK_REWIND = 0x00100000;
final int MHEG_MASK_PLAY_PAUSE = 0x00400000;
final int MHEG_MASK_GUIDE = 0x00200000;
final int MHEG_MASK_EXIT = 0x00800000;
Log.d(TAG, "Mheg keyset mask value : " + MainActivity.getMhegKeySet()
+ "KeyEvent : " + keyCode + "\n");
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
if (0 != (MHEG_MASK_UP & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
if (0 != (MHEG_MASK_DOWN & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
if (0 != (MHEG_MASK_LEFT & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (0 != (MHEG_MASK_RIGHT & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_0:
case KeyEvent.KEYCODE_1:
case KeyEvent.KEYCODE_2:
case KeyEvent.KEYCODE_3:
case KeyEvent.KEYCODE_4:
case KeyEvent.KEYCODE_5:
case KeyEvent.KEYCODE_6:
case KeyEvent.KEYCODE_7:
case KeyEvent.KEYCODE_8:
case KeyEvent.KEYCODE_9: {
if (0 != (MHEG_MASK_DIGIT & MainActivity.getMhegKeySet())) {
return true;
}
}
break;
case KeyEvent.KEYCODE_ENTER:
case KeyEvent.KEYCODE_DPAD_CENTER:
if (0 != (MHEG_MASK_SELECT & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_DEL:
case KeyEvent.KEYCODE_CLEAR:
case KeyEvent.KEYCODE_F10:
if (0 != (MHEG_MASK_CALCEL & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_PROG_RED:
if (0 != (MHEG_MASK_RED & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_PROG_GREEN:
if (0 != (MHEG_MASK_GREEN & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_PROG_YELLOW:
Log.d(TAG, "Mhegkeyset " + MainActivity.getMhegKeySet()
+ "KeyEvent : " + keyCode + " enter\n");
if (0 != (MHEG_MASK_YELLOW & MainActivity.getMhegKeySet())) {
Log.d(TAG, "Mhegkeyset " + MainActivity.getMhegKeySet()
+ "KeyEvent : " + keyCode + " return true\n");
return true;
}
break;
case KeyEvent.KEYCODE_PROG_BLUE:
if (0 != (MHEG_MASK_BLUE & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_F2:
case KeyEvent.KEYCODE_F5:
if (0 != (MHEG_MASK_TEXT & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_INFO:
if (0 != (MHEG_MASK_INFO & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_MEDIA_STOP:
if (0 != (MHEG_MASK_STOP & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_MEDIA_PLAY:
if (0 != (MHEG_MASK_PLAY & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_MEDIA_PAUSE:
if (0 != (MHEG_MASK_PAUSE & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_MEDIA_NEXT:
if (0 != (MHEG_MASK_SKIP_FORWARD & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
if (0 != (MHEG_MASK_SKIP_BACK & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
if (0 != (MHEG_MASK_FAST_FORWARD & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_MEDIA_REWIND:
if (0 != (MHEG_MASK_REWIND & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
if (0 != (MHEG_MASK_PLAY_PAUSE & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_GUIDE:
case KeyEvent.KEYCODE_SEARCH:
if (0 != (MHEG_MASK_GUIDE & MainActivity.getMhegKeySet())) {
return true;
}
break;
case KeyEvent.KEYCODE_ESCAPE:
case KeyEvent.KEYCODE_BACK:
if (0 != (MHEG_MASK_EXIT & MainActivity.getMhegKeySet())) {
return true;
}
break;
default:
break;
}
return false;
}
private class PictureFormatHandler {
public PictureFormatHandler() {
};
int moveToNextFormat(int currentInputGroup) {
AspectRatioMode currentFormat = AspectRatioMode.AUTO;
AspectRatioMode nextFormat = AspectRatioMode.AUTO;
/*
* PRS - Auto - Normal 4:3 - Zoom 14:9 - Panorama - Letterbox - Full
* - Cinema 16:9 - Cinema 14:9
*/
/*
* enum OUTPUT_ASPECT_RATIO_16_9_AUTO = 7,
* OUTPUT_ASPECT_RATIO_16_9_FULL = 8,
* OUTPUT_ASPECT_RATIO_16_9_CINEMA_16_9 = 9,
* OUTPUT_ASPECT_RATIO_16_9_CINEMA_14_9 = 10,
* OUTPUT_ASPECT_RATIO_16_9_NOR4_3 = 11,
* OUTPUT_ASPECT_RATIO_16_9_ZOOM_14_9 = 12,
* OUTPUT_ASPECT_RATIO_16_9_PANORAMA = 13,
* OUTPUT_ASPECT_RATIO_16_9_UNDERSCAN = 14,
*/
try {
currentFormat = activity.service.getSystemControl()
.getPictureControl().getAspectRatioMode();
} catch (Exception e) {
e.printStackTrace();
}
switch (currentFormat) {
/*
* If 0 - (OK)digital tuner, (OK)HDMI or (OK)Component source is
* active the following picture formats shall be supported: - Auto -
* Normal 4:3 - Zoom 14:9 - Panorama - Letterbox - Full - Cinema
* 16:9 - Cinema 14:9 If 1 - (OK)analog tuner, SCART or
* (OK)Composite source is active the following picture formats
* shall be supported: - Auto - Normal 4:3 - Zoom 14:9 - Panorama -
* Letterbox - Cinema 16:9 - Cinema 14:9 If 2 - (OK)VGA (PC) source
* is active, device shall support following picture formats: -
* Normal 4:3 - Cinema 16:9
*/
case AUTO:
nextFormat = AspectRatioMode.NORMAL_4_3;
break;
case NORMAL_4_3:
if (currentInputGroup == PictureSettingsDialog.VGAInputTypeGroup) {
nextFormat = AspectRatioMode.CINEMA_16_9;
} else {
nextFormat = AspectRatioMode.ZOOM_14_9;
}
break;
case ZOOM_14_9:
nextFormat = AspectRatioMode.PANORAMA;
break;
case PANORAMA:
nextFormat = AspectRatioMode.LETTERBOX; // Letterbox
break;
case LETTERBOX: // Letterbox
if (currentInputGroup == PictureSettingsDialog.AnalogInputTypeGroup) {
nextFormat = AspectRatioMode.CINEMA_16_9;
} else {
nextFormat = AspectRatioMode.FULL;
}
break;
case FULL:
nextFormat = AspectRatioMode.CINEMA_16_9;
break;
case CINEMA_16_9:
if (currentInputGroup == PictureSettingsDialog.VGAInputTypeGroup) {
nextFormat = AspectRatioMode.NORMAL_4_3;
} else {
nextFormat = AspectRatioMode.CINEMA_14_9;
}
break;
case CINEMA_14_9:
nextFormat = AspectRatioMode.AUTO;
break;
}
Log.d(TAG, "moveToNextFormat: nextFormat[" + nextFormat + "]");
try {
activity.service.getSystemControl().getPictureControl()
.setAspectRatioMode(nextFormat);
} catch (Exception e) {
e.printStackTrace();
}
return nextFormat.getValue();
}
String currentFormatToString() {
AspectRatioMode format = AspectRatioMode.AUTO;
try {
format = activity.service.getSystemControl()
.getPictureControl().getAspectRatioMode();
} catch (Exception e) {
e.printStackTrace();
}
Log.d(TAG, "currentFormatToString: format[" + format + "]");
switch (format) {
case AUTO:
return activity
.getResources()
.getString(
R.string.tv_menu_picture_settings_aspect_ratio_auto);
case NORMAL_4_3:
return activity
.getResources()
.getString(
R.string.tv_menu_picture_settings_aspect_ratio_normal_4_3);
case ZOOM_14_9:
return activity
.getResources()
.getString(
R.string.tv_menu_picture_settings_aspect_ratio_zoom_14_9);
case PANORAMA:
return activity
.getResources()
.getString(
R.string.tv_menu_picture_settings_aspect_ratio_panorama);
case LETTERBOX:
return activity
.getResources()
.getString(
R.string.tv_menu_picture_settings_aspect_ratio_letterbox);
case FULL:
return activity
.getResources()
.getString(
R.string.tv_menu_picture_settings_aspect_ratio_full);
case CINEMA_16_9:
return activity
.getResources()
.getString(
R.string.tv_menu_picture_settings_aspect_ratio_cinema_16_9);
case CINEMA_14_9:
return activity
.getResources()
.getString(
R.string.tv_menu_picture_settings_aspect_ratio_cinema_14_9);
default:
return "Unknown";
}
}
}
}