public void dispose() { mIccRecords.unregisterForRecordsLoaded(this); mCmdIf.unSetOnCatSessionEnd(this); mCmdIf.unSetOnCatProactiveCmd(this); mCmdIf.unSetOnCatEvent(this); mCmdIf.unSetOnCatCallSetUp(this); this.removeCallbacksAndMessages(null); }
/** * Used for instantiating/updating the Service from the GsmPhone or CdmaPhone constructor. * * @param ci CommandsInterface object * @param ir IccRecords object * @param context phone app context * @param fh Icc file handler * @param ic Icc card * @return The only Service object in the system */ public static CatService getInstance(CommandsInterface ci, Context context, UiccCard ic) { UiccCardApplication ca = null; IccFileHandler fh = null; IccRecords ir = null; if (ic != null) { /* Since Cat is not tied to any application, but rather is Uicc application * in itself - just get first FileHandler and IccRecords object */ ca = ic.getApplicationIndex(0); if (ca != null) { fh = ca.getIccFileHandler(); ir = ca.getIccRecords(); } } synchronized (sInstanceLock) { if (sInstance == null) { if (ci == null || ca == null || ir == null || context == null || fh == null || ic == null) { return null; } HandlerThread thread = new HandlerThread("Cat Telephony service"); thread.start(); sInstance = new CatService(ci, ca, ir, context, fh, ic); CatLog.d(sInstance, "NEW sInstance"); } else if ((ir != null) && (mIccRecords != ir)) { if (mIccRecords != null) { mIccRecords.unregisterForRecordsLoaded(sInstance); } if (mUiccApplication != null) { mUiccApplication.unregisterForReady(sInstance); } CatLog.d(sInstance, "Reinitialize the Service with SIMRecords and UiccCardApplication"); mIccRecords = ir; mUiccApplication = ca; // re-Register for SIM ready event. mIccRecords.registerForRecordsLoaded(sInstance, MSG_ID_ICC_RECORDS_LOADED, null); mUiccApplication.registerForReady(sInstance, MSG_ID_SIM_READY, null); CatLog.d(sInstance, "sr changed reinitialize and return current sInstance"); } else { CatLog.d(sInstance, "Return current sInstance"); } return sInstance; } }