package com.iwedia.gui.callbacks; import android.content.DialogInterface; import android.content.DialogInterface.OnKeyListener; 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 com.iwedia.comm.IChannelsCallback; import com.iwedia.comm.content.Content; import com.iwedia.comm.content.IContentListControl; import com.iwedia.dtv.service.SourceType; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVAlertDialog; import com.iwedia.gui.components.A4TVMultimediaController; import com.iwedia.gui.listeners.MainKeyListener; import com.iwedia.gui.osd.CheckServiceType; import com.iwedia.gui.osd.OSDGlobal; import com.iwedia.gui.osd.OSDHandlerHelper; import com.iwedia.gui.osd.curleffect.CurlHandler; public class ChannelsCallBack extends IChannelsCallback.Stub implements OSDGlobal { private static final String TAG = "ChannelsCallBack"; /** Messages */ private static final int HBB_HIDE = 0; private static final int HIDE_SECOND_DISPLAY = 1; private static final int UPDATE_CHANNEL_INFO = 2; private static final int PLAYBACK_STOP = 3; private static final int NETWORK_CHANGED = 4; /** Instance of MainActivity */ private MainActivity mActivity = null; /** Instance of CallBack Handler. */ private CallBackHandler mCallBackHandler = null; /** UI Handler */ private Handler mHandler = null; public ChannelsCallBack(CallBackHandler callBackHandler, MainActivity activity) { mCallBackHandler = callBackHandler; mActivity = activity; initializeHandlers(); } @Override public void antennaConnected(int deviceID, boolean state) throws RemoteException { Log.d(TAG, "ANTENNA IS CONNECTED deviceID: " + deviceID + " state: " + state); mCallBackHandler.setAntenaConnected(state); IContentListControl contentListControl = MainActivity.service .getContentListControl(); Content primaryContent = contentListControl.getActiveContent(0); Content secondaryContent = contentListControl.getActiveContent(1); int primaryContentFilterType = primaryContent.getFilterType(); if (deviceID == 0) { if ((SourceType.CAB == primaryContent.getSourceType()) || (SourceType.TER == primaryContent.getSourceType()) || (SourceType.SAT == primaryContent.getSourceType())) { // antenna connected if (state) { mActivity.getCheckServiceType().hideNoSignalLayout(); } // antenna disconnected else { Message.obtain(mHandler, HBB_HIDE); mActivity.getCheckServiceType().showNoSignalLayout(); } } } else { if (secondaryContent != null) { int secondaryContentFilterType = secondaryContent .getFilterType(); if ((SourceType.CAB == secondaryContent.getSourceType()) || (SourceType.TER == secondaryContent.getSourceType()) || (SourceType.SAT == secondaryContent.getSourceType())) { if (state == false) { contentListControl.stopContent(secondaryContent, 1); Message.obtain(mHandler, HIDE_SECOND_DISPLAY); } } } } } @Override public void nowNextChanged() throws RemoteException { Message.obtain(mHandler, UPDATE_CHANNEL_INFO); } @Override public void epgEventsChanged() throws RemoteException { } @Override public void playbackStopped(int displayId) throws RemoteException { Log.i(TAG, "PlayBackStopped CallBack"); if (MainKeyListener.getAppState() != MainKeyListener.CLEAN_SCREEN || !MainActivity.sharedPrefs.getBoolean( MainActivity.CURL_ANIMATION_ON_OFF, true)) { Log.i(TAG, "PlayBackStopped CallBack Accepted"); // Blank Screen try { MainActivity.service.getVideoControl().videoBlank(0, true); } catch (Exception e) { Log.e(TAG, "Blank Screen Exception", e); } } Message.obtain(mHandler, PLAYBACK_STOP); } @Override public void serviceScrambled(boolean state) throws RemoteException { Log.d(TAG, "serviceScrambled callback, state: " + state); CheckServiceType.serviceScrambledChanged(state); } @Override public void networkChanged(int networkId) throws RemoteException { Log.d(TAG, "networkChanged callback, networkId: " + networkId); Message.obtain(mHandler, NETWORK_CHANGED); } @Override public void startingService() throws RemoteException { // Check Service try { Content lContent = MainActivity.service.getContentListControl() .getActiveContent(0); CheckServiceType.checkService(lContent, true); } catch (Exception e) { e.printStackTrace(); } } private void initializeHandlers() { mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case HBB_HIDE: { /* * Remove WebView from screen and set key mask to 0 */ if (0 != (MainActivity.getKeySet())) { try { if (!mActivity.isHbbTVInHTTPPlaybackMode()) { mActivity.webDialog.getHbbTVView() .setAlpha((float) 0.00); MainActivity.setKeySet(0); } } catch (Exception e) { e.printStackTrace(); } } break; } case HIDE_SECOND_DISPLAY: { mActivity.getPrimaryVideoView().setScaling(0, 0, 1920, 1080); mActivity.getSecondaryVideoView().updateVisibility( View.INVISIBLE); mCallBackHandler .showToastMessage(R.string.second_disaplay_signal_lost); break; } case UPDATE_CHANNEL_INFO: { try { CurlHandler lCurlHandler = ((CurlHandler) mActivity .getPageCurl()); if (lCurlHandler.getCurlView().isFlagChannelInfo() || lCurlHandler.getCurlView() .getCurrentState() == STATE_CHANNEL_INFO) { lCurlHandler .getCurlView() .setUpNewChannelInfoByIndex( lCurlHandler .getChannelChangeHandler() .getChannelIndex()); } } catch (Exception e) { e.printStackTrace(); } break; } case PLAYBACK_STOP: { if (OSDHandlerHelper.getHandlerState() == PVR_STATE_PLAY_PLAY_BACK) { // TODO: Applies for main display only final int mDisplayId = 0; A4TVMultimediaController.getControlProvider().play( mDisplayId); /** Show Info */ mActivity.getPageCurl().multimediaController(false); } // Hide multimedia if video stream is in the background if (mActivity.getPageCurl().getHandlerState() == CURL_HANDLER_STATE_MULTIMEDIA_CONTROLLER) { mActivity.getMultimediaHandler().closeMultimedia(); /** If antenna layout is visible hide it */ if (!mCallBackHandler.isAntennaConnected()) { mActivity.getCheckServiceType() .showNoSignalLayout(); } } break; } case NETWORK_CHANGED: { final A4TVAlertDialog alert = new A4TVAlertDialog( mActivity); alert.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { switch (keyCode) { // /////////////////////////////////////////////////////////////////// // Disable Volume keys when retry scan dialog is // visible // /////////////////////////////////////////////////////////////////// // case KeyEvent.KEYCODE_F6: case KeyEvent.KEYCODE_VOLUME_UP: case KeyEvent.KEYCODE_VOLUME_DOWN: case KeyEvent.KEYCODE_MUTE: { return true; } default: break; } return false; } }); alert.setTitleOfAlertDialog(R.string.network_changed_dialog_title); alert.setMessage(R.string.network_changed_dialog_need_rescan); alert.setPositiveButton(R.string.button_text_ok, new android.view.View.OnClickListener() { @Override public void onClick(View v) { alert.cancel(); } }); // MK: We can offer the user choice to rescan now when // the // NIT scan API is not ready /* * alert.setPositiveButton(R.string. * network_changed_dialog_scan_now, new * android.view.View.OnClickListener() { * @Override public void onClick(View v) { // MK TODO * start quick NIT scan alert.cancel(); } }); * alert.setNegativeButton * (R.string.network_changed_dialog_scan_latter, new * android.view.View.OnClickListener() { * @Override public void onClick(View v) { // MK TODO * schadule scan, or do nothing, mw will re scan on * power up alert.cancel(); } }); */ // show alert dialog alert.show(); break; } default: { break; } } } }; } }