package com.iwedia.service.ci; import android.content.Intent; import android.os.Handler; import android.os.RemoteException; import android.util.Log; import android.widget.Toast; import com.iwedia.comm.ICICallback; import com.iwedia.comm.ICIControl; import com.iwedia.dtv.ci.ApplicationInfo; import com.iwedia.dtv.ci.EnquiryData; import com.iwedia.dtv.ci.OperatorProfileInfo; import com.iwedia.dtv.types.InternalException; import com.iwedia.service.IWEDIAService; import com.iwedia.service.R; import com.iwedia.service.proxyservice.IDTVInterface; public class CIControl extends ICIControl.Stub implements IDTVInterface { private static final boolean DEBUG = true; private static final String LOG_TAG = "CIControl"; private static com.iwedia.comm.ICICallback ciCallback; public static final int CI_REMOVED = 0; public static final int CI_INSERTED = 1; public static final int CI_INVALID_HOST_CERTIFICATE = 2; public static final int CI_MAX_TOTAL_CAM = 2; @Override public void open(int slotNumber) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "open slotNumber: " + slotNumber); } try { IWEDIAService.getInstance().getDTVManager().getCIControl() .open(slotNumber); } catch (InternalException e) { e.printStackTrace(); } } @Override public void close(int slotNumber) throws RemoteException { if (DEBUG) { Log.e(LOG_TAG, "close (" + slotNumber + ")"); } try { IWEDIAService.getInstance().getDTVManager().getCIControl() .close(slotNumber); } catch (InternalException e) { e.printStackTrace(); } } @Override public void answer(int slotNumber, String answer, int cancel) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "answer: " + slotNumber + ", " + answer); } IWEDIAService.getInstance().getDTVManager().getCIControl() .answer(slotNumber, answer, cancel); } @Override public void selectMenuItem(int slotNumber, int choice) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "selectMenuItem: " + slotNumber + ", " + choice); } IWEDIAService.getInstance().getDTVManager().getCIControl() .selectMenuItem(slotNumber, choice); } @Override public String getTitle(int slotNumber) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getTitle: " + slotNumber); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getTitle(slotNumber); } @Override public String getTopText(int slotNumber) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getTopText: " + slotNumber); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getTopText(slotNumber); } @Override public String getBottomText(int slotNumber) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getBottomText: " + slotNumber); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getBottomText(slotNumber); } @Override public String getMenuItemText(int slotNumber, int itemNumber) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getMenuItemText: " + slotNumber + " " + itemNumber); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getMenuItemText(slotNumber, itemNumber); } @Override public String getListItemText(int slotNumber, int itemNumber) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getListItemText: " + slotNumber + " " + itemNumber); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getListItemText(slotNumber, itemNumber); } @Override public EnquiryData getEnquiryText(int slotNumber) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getEnquiryText: " + slotNumber); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getEnquiryText(slotNumber); } @Override public int getNumberOfItems(int slotNumber) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getNumberOfItems: " + slotNumber); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getNumberOfItems(slotNumber); } @Override public String getLanguage(int slotNumber) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getLanguage: " + slotNumber); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getLanguage(slotNumber); } @Override public void setLanguage(int slotNumber, String language) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "setLanguage: " + slotNumber + " " + language); } IWEDIAService.getInstance().getDTVManager().getCIControl() .setLanguage(slotNumber, language); } @Override public void installOperatorProfile(int liveRouteID, int slotNumber) throws RemoteException { if (DEBUG) Log.d(LOG_TAG, "installOperatorProfile: " + liveRouteID + " " + slotNumber); IWEDIAService.getInstance().getDTVManager().getCIControl() .installOperatorProfile(liveRouteID, slotNumber); } @Override public int getOperatorProfileCount() throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getOperatorProfileCount"); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getOperatorProfileCount(); } @Override public OperatorProfileInfo getOperatorProfileInfo(int profileId) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getOperatorProfileInfo: " + profileId); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getOperatorProfileInfo(profileId); } @Override public void removeOperatorProfile(int profileId) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "removeOperatorProfile: " + profileId); } try { IWEDIAService.getInstance().getDTVManager().getCIControl() .removeOperatorProfile(profileId); } catch (InternalException e) { e.printStackTrace(); } } @Override public int getNumberOfApplications() throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getNumberOfApplications"); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getNumberOfApplications(); } @Override public ApplicationInfo getApplicationInfo(int appNumber) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getApplicationInfo appNumber: " + appNumber); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getApplicationInfo(appNumber); } @Override public void exitOperatorProfile() throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "exitOperatorProfile "); } IWEDIAService.getInstance().getDTVManager().getCIControl() .exitOperatorProfile(); } @Override public void operatorProfileUserReply(int reply) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "operatorProfileUserReply - reply: " + reply); } IWEDIAService.getInstance().getDTVManager().getCIControl() .operatorProfileUserReply(reply); } @Override public void enterOperatorProfile(int listIndex) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "enterOperatorProfile - index: " + listIndex); } IWEDIAService.getInstance().getDTVManager().getCIControl() .operatorProfileUserReply(listIndex); } @Override public void setPin(int pin) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "setPin: " + pin); } IWEDIAService.getInstance().getDTVManager().getCIControl().setPin(pin); } @Override public int getPin() throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "getPin"); } return IWEDIAService.getInstance().getDTVManager().getCIControl() .getPin(); } @Override public void registerCallback(ICICallback callback) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "registerCallback"); } ciCallback = callback; } @Override public void unregisterCallback(ICICallback callback) throws RemoteException { if (DEBUG) { Log.d(LOG_TAG, "unregisterCallback"); } ciCallback = null; } public static com.iwedia.dtv.ci.ICICallback getCICallback() { return CICallback; } private static com.iwedia.dtv.ci.ICICallback CICallback = new com.iwedia.dtv.ci.ICICallback() { Handler mHandler = new Handler(); @Override public void dialogEnquiry(int slotNumber) { Log.d(LOG_TAG, "dialogEnquiry"); if (ciCallback != null) { try { ciCallback.dialogEnquiry(slotNumber); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void dialogLabel() { Log.d(LOG_TAG, "dialogLabel"); if (ciCallback != null) { try { ciCallback.dialogLabel(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void dialogList(int slotNumber) { Log.d(LOG_TAG, "dialogList"); if (ciCallback != null) { try { ciCallback.dialogList(slotNumber); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void dialogMenu(int slotNumber) { Log.d(LOG_TAG, "dialogMenu"); if (ciCallback != null) { Log.d(LOG_TAG, "dialogMenu - OK"); try { ciCallback.dialogMenu(slotNumber); } catch (RemoteException e) { e.printStackTrace(); } } else { Log.d(LOG_TAG, "dialogMenu - no callback send intent"); Intent intent = new Intent(); intent.setAction("iwedia.action.CI_DIALOG"); intent.setPackage("com.iwedia.gui"); intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); IWEDIAService.getInstance().startActivity(intent); // wait for callback registration for (int i = 0; i < 10; i++) { Log.d(LOG_TAG, "Waiting for callback... " + i); if (ciCallback != null) { Log.d(LOG_TAG, "Callback registered"); break; } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } @Override public void dialogNone() { Log.d(LOG_TAG, "dialogNone"); if (ciCallback != null) { try { ciCallback.dialogNone(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void dialogRequested() { Log.d(LOG_TAG, "dialogRequested"); if (ciCallback != null) { try { ciCallback.dialogRequested(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void invalideCertificate() { Log.d(LOG_TAG, "invalideCertificate"); mHandler.post(new Runnable() { @Override public void run() { Toast.makeText(IWEDIAService.getContext(), R.string.invalid_host_certificate, Toast.LENGTH_SHORT).show(); } }); if (ciCallback != null) { try { ciCallback.invalideCertificate(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void moduleInserted() { Log.d(LOG_TAG, "moduleInserted"); mHandler.post(new Runnable() { @Override public void run() { Toast.makeText(IWEDIAService.getContext(), R.string.cam_inserted, Toast.LENGTH_SHORT).show(); } }); if (ciCallback != null) { try { ciCallback.moduleInserted(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void moduleRemoved() { Log.d(LOG_TAG, "moduleRemoved"); mHandler.post(new Runnable() { @Override public void run() { Toast.makeText(IWEDIAService.getContext(), R.string.cam_removed, Toast.LENGTH_SHORT).show(); } }); if (ciCallback != null) { try { ciCallback.moduleRemoved(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void noCamOnScrambled() { Log.d(LOG_TAG, "noCamOnScrambled"); if (ciCallback != null) { try { ciCallback.noCamOnScrambled(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void opNotifyLabel() { Log.d(LOG_TAG, "opNotifyLabel"); if (ciCallback != null) { try { ciCallback.opNotifyLabel(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void opNotifyQuestionLabel() { Log.d(LOG_TAG, "opNotifyQuestionLabel"); if (ciCallback != null) { try { ciCallback.opNotifyQuestionLabel(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void opProfileInstallFinished() { Log.d(LOG_TAG, "opProfileInstallFinished"); if (ciCallback != null) { try { ciCallback.opProfileInstallFinished(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void opProfileInstallStarted() { Log.d(LOG_TAG, "opProfileInstallStarted"); if (ciCallback != null) { try { ciCallback.opProfileInstallStarted(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void opProfileNameChanged() { Log.d(LOG_TAG, "opProfileNameChanged"); if (ciCallback != null) { try { ciCallback.opProfileNameChanged(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void sessionStatus() { Log.d(LOG_TAG, "sessionStatus"); if (ciCallback != null) { try { ciCallback.sessionStatus(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void statusClosed() { Log.d(LOG_TAG, "statusClosed"); if (ciCallback != null) { try { ciCallback.statusClosed(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void statusOpened() { Log.d(LOG_TAG, "statusOpened"); if (ciCallback != null) { try { ciCallback.statusOpened(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void undefined() { Log.d(LOG_TAG, "undefined"); if (ciCallback != null) { try { ciCallback.undefined(); } catch (RemoteException e) { e.printStackTrace(); } } } @Override public void updateApplications() { Log.d(LOG_TAG, "updateApplications"); if (ciCallback != null) { try { ciCallback.updateApplications(); } catch (RemoteException e) { e.printStackTrace(); } } } }; @Override public void channelZapping(boolean status) { // TODO Auto-generated method stub } }