package com.iwedia.service.epg;
import android.os.RemoteException;
import android.util.Log;
import com.iwedia.comm.IEpgCallback;
import com.iwedia.comm.IEpgControl;
import com.iwedia.dtv.epg.EpgEvent;
import com.iwedia.dtv.epg.EpgEventType;
import com.iwedia.dtv.epg.EpgFilter;
import com.iwedia.dtv.epg.EpgServiceFilter;
import com.iwedia.dtv.types.InternalException;
import com.iwedia.service.IWEDIAService;
import com.iwedia.service.proxyservice.IDTVInterface;
/**
* EPG Controller.
*
* @author Marko Zivanovic.
*/
public class EpgControl extends IEpgControl.Stub implements IDTVInterface {
private final String LOG_TAG = getClass().getSimpleName();
public static IEpgCallback epgCallback;
private static boolean isClbkRegistered = false;
@Override
public int createEventList() throws RemoteException {
try {
return IWEDIAService.getInstance().getDTVManager().getEpgControl()
.createEventList();
} catch (InternalException e) {
e.printStackTrace();
}
return -1;
}
@Override
public void setFilter(int filterID, EpgFilter data) throws RemoteException {
IWEDIAService.getInstance().getDTVManager().getEpgControl()
.setFilter(filterID, data);
}
@Override
public void startAcquisition(int filterID) throws RemoteException {
IWEDIAService.getInstance().getDTVManager().getEpgControl()
.startAcquisition(filterID);
}
@Override
public void stopAcquisition(int filterID) throws RemoteException {
IWEDIAService.getInstance().getDTVManager().getEpgControl()
.stopAcquisition(filterID);
}
/**
* Returns EPG event {@link EpgEvent} for given service index, and index of
* event.
*/
@Override
public EpgEvent getRequestedEvent(int filterID, int serviceIndex,
int eventIndex) throws RemoteException {
return IWEDIAService.getInstance().getDTVManager().getEpgControl()
.getRequestedEvent(filterID, serviceIndex, eventIndex);
}
private int servIndex = -1;
private EpgServiceFilter serviceFilter;
/**
* Returns number of EPG events for given serviceIndex for given day in
* week.
*/
@Override
public int getAvailableEventsNumber(int filterID, int serviceIndex)
throws RemoteException {
return IWEDIAService.getInstance().getDTVManager().getEpgControl()
.getAvailableEventsNumber(filterID, serviceIndex);
}
@Override
public void releaseEventList(int filterID) throws RemoteException {
IWEDIAService.getInstance().getDTVManager().getEpgControl()
.releaseEventList(filterID);
}
/**
* Returns EPG event {@link EpgEvent} for given service index, and index of
* event.
*/
@Override
public EpgEvent getPresentFollowingEvent(int filterID, int serviceIndex,
EpgEventType type) throws RemoteException {
return IWEDIAService.getInstance().getDTVManager().getEpgControl()
.getPresentFollowingEvent(filterID, serviceIndex, type);
}
@Override
public String getEventExtendedDescription(int filterID, int eventId,
int serviceIndex) throws RemoteException {
return IWEDIAService.getInstance().getDTVManager().getEpgControl()
.getEventExtendedDescription(filterID, eventId, serviceIndex);
}
@Override
public void registerCallback(IEpgCallback eventCallback, int filterID)
throws RemoteException {
if (isClbkRegistered == false) {
epgCallback = eventCallback;
IWEDIAService.getInstance().getDTVManager().getEpgControl()
.registerCallback(eventsCallback, filterID);
isClbkRegistered = true;
} else {
Log.i(LOG_TAG, "registerCallback: Callback is already registered!");
}
}
@Override
public void unregisterCallback(IEpgCallback callback, int filterID)
throws RemoteException {
if (isClbkRegistered == true) {
IWEDIAService.getInstance().getDTVManager().getEpgControl()
.unregisterCallback(eventsCallback, filterID);
epgCallback = null;
isClbkRegistered = false;
} else {
Log.i(LOG_TAG, "unregisterCallback: Callback is not registered!");
}
}
private static com.iwedia.dtv.epg.IEpgCallback eventsCallback = new com.iwedia.dtv.epg.IEpgCallback() {
@Override
public void pfAcquisitionFinished(int filterID, int serviceIndex) {
try {
epgCallback.pfAcquisitionFinished(filterID, serviceIndex);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void pfEventChanged(int filterID, int serviceIndex) {
try {
epgCallback.pfEventChanged(filterID, serviceIndex);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void scAcquisitionFinished(int filterID, int serviceIndex) {
try {
epgCallback.scAcquisitionFinished(filterID, serviceIndex);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void scEventChanged(int filterID, int serviceIndex) {
try {
epgCallback.scEventChanged(filterID, serviceIndex);
} catch (RemoteException e) {
e.printStackTrace();
}
}
};
@Override
public void channelZapping(boolean status) {
// TODO Auto-generated method stub
}
}