package com.iwedia.service.mheg;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.util.Log;
import com.iwedia.comm.IMhegCallback;
import com.iwedia.comm.IMhegControl;
import com.iwedia.comm.enums.MhegMode;
import com.iwedia.dtv.types.UserControl;
import com.iwedia.service.IWEDIAService;
import com.iwedia.service.proxyservice.IDTVInterface;
import com.iwedia.service.system.SystemControl;
public class MhegControl extends IMhegControl.Stub implements IDTVInterface {
private static final String LOG_TAG = "MhegControl";
final static RemoteCallbackList<IMhegCallback> mMhegCallbackManager = new RemoteCallbackList<IMhegCallback>();
public MhegControl() {
}
private int mhegMode = MhegMode.MODE_OFF;
@Override
public boolean show() throws RemoteException {
mhegMode = MhegMode.MODE_ON;
IWEDIAService
.getInstance()
.getDTVManager()
.getMhegControl()
.show(IWEDIAService.getInstance().getDtvManagerProxy()
.getCurrentLiveRoute(), 0);
SystemControl.broadcastMhegShow();
return true;
}
@Override
public boolean hide() throws RemoteException {
if (mhegMode != MhegMode.MODE_OFF) {
mhegMode = MhegMode.MODE_OFF;
IWEDIAService
.getInstance()
.getDTVManager()
.getMhegControl()
.hide(IWEDIAService.getInstance().getDtvManagerProxy()
.getCurrentLiveRoute());
SystemControl.broadcastMhegHide();
}
return true;
}
@Override
public boolean sendInputControl(int keyCode, UserControl ctrl)
throws RemoteException {
IWEDIAService
.getInstance()
.getDTVManager()
.getMhegControl()
.sendInputControl(
IWEDIAService.getInstance().getDtvManagerProxy()
.getCurrentLiveRoute(), ctrl, keyCode);
return false;
}
private static Object obj1 = new Object();
public static void sMhegKeyMaskEvent(int keyMask) {
Log.e(LOG_TAG, "sMhegKeyMaskEvent:" + keyMask);
synchronized (obj1) {
int i = mMhegCallbackManager.beginBroadcast();
if (i > 1) {
Log.e(LOG_TAG, "More than one callback (" + i + ")");
}
while (i > 0) {
i--;
try {
mMhegCallbackManager.getBroadcastItem(i).mhegKeyMaskEvent(
keyMask);
} catch (RemoteException e) {
e.printStackTrace();
} catch (RuntimeException e) {
e.printStackTrace();
mMhegCallbackManager.unregister(mMhegCallbackManager
.getBroadcastItem(i));
}
}
mMhegCallbackManager.finishBroadcast();
}
}
@Override
public void registerCallback(IMhegCallback mhegCallback)
throws RemoteException {
mMhegCallbackManager.register(mhegCallback);
}
@Override
public int getState() throws RemoteException {
return mhegMode;
}
@Override
public boolean isPresent() throws RemoteException {
return IWEDIAService
.getInstance()
.getDTVManager()
.getMhegControl()
.isPresent(
IWEDIAService.getInstance().getDtvManagerProxy()
.getCurrentLiveRoute());
}
@Override
public void channelZapping(boolean status) {
// TODO Auto-generated method stub
}
}