@DSGenerator( tool_name = "Doppelganger", tool_version = "2.0", generated_on = "2013-12-30 12:58:54.921 -0500", hash_original_method = "E50365918A8B4813331E3A24E11292EF", hash_generated_method = "3CBE59FC5B8ED7B8F451502F6184DC1C") @Override protected void onAllRecordsLoaded() { Log.d(LOG_TAG, "RuimRecords: record load complete"); // Further records that can be inserted are Operator/OEM dependent String operator = getRUIMOperatorNumeric(); SystemProperties.set(PROPERTY_ICC_OPERATOR_NUMERIC, operator); if (mImsi != null) { SystemProperties.set( PROPERTY_ICC_OPERATOR_ISO_COUNTRY, MccTable.countryCodeForMcc(Integer.parseInt(mImsi.substring(0, 3)))); } recordsLoadedRegistrants.notifyRegistrants(new AsyncResult(null, null, null)); phone.mIccCard.broadcastIccStateChangedIntent(RuimCard.INTENT_VALUE_ICC_LOADED, null); }
/** * Returns the 5 or 6 digit MCC/MNC of the operator that provided the RUIM card. Returns null of * RUIM is not yet ready */ @DSSource({DSSourceKind.NETWORK}) @DSGenerator( tool_name = "Doppelganger", tool_version = "2.0", generated_on = "2013-12-30 12:58:54.910 -0500", hash_original_method = "1499AC64B3568BF128EFDB3C9845AC3C", hash_generated_method = "951A50BCD18A3DFD623BEB79035586BE") public String getRUIMOperatorNumeric() { if (mImsi == null) { return null; } if (mncLength != UNINITIALIZED && mncLength != UNKNOWN) { // Length = length of MCC + length of MNC // length of mcc = 3 (3GPP2 C.S0005 - Section 2.3) return mImsi.substring(0, 3 + mncLength); } // Guess the MNC length based on the MCC if we don't // have a valid value in ef[ad] int mcc = Integer.parseInt(mImsi.substring(0, 3)); return mImsi.substring(0, 3 + MccTable.smallestDigitsMccForMnc(mcc)); }
@DSSafe(DSCat.IPC_CALLBACK) @DSGenerator( tool_name = "Doppelganger", tool_version = "2.0", generated_on = "2013-12-30 12:58:54.915 -0500", hash_original_method = "584E0C361321C2DCD1B11D8CE97AF6DF", hash_generated_method = "CAF5DAE398870082803BAF9A29AA061A") @Override public void handleMessage(Message msg) { AsyncResult ar; byte data[]; boolean isRecordLoadResponse = false; try { switch (msg.what) { case EVENT_RUIM_READY: onRuimReady(); break; case EVENT_RADIO_OFF_OR_NOT_AVAILABLE: onRadioOffOrNotAvailable(); break; case EVENT_GET_DEVICE_IDENTITY_DONE: Log.d(LOG_TAG, "Event EVENT_GET_DEVICE_IDENTITY_DONE Received"); break; /* IO events */ case EVENT_GET_IMSI_DONE: isRecordLoadResponse = true; ar = (AsyncResult) msg.obj; if (ar.exception != null) { Log.e(LOG_TAG, "Exception querying IMSI, Exception:" + ar.exception); break; } mImsi = (String) ar.result; // IMSI (MCC+MNC+MSIN) is at least 6 digits, but not more // than 15 (and usually 15). if (mImsi != null && (mImsi.length() < 6 || mImsi.length() > 15)) { Log.e(LOG_TAG, "invalid IMSI " + mImsi); mImsi = null; } Log.d(LOG_TAG, "IMSI: " + mImsi.substring(0, 6) + "xxxxxxxxx"); String operatorNumeric = getRUIMOperatorNumeric(); if (operatorNumeric != null) { if (operatorNumeric.length() <= 6) { MccTable.updateMccMncConfiguration(phone, operatorNumeric); } } break; case EVENT_GET_CDMA_SUBSCRIPTION_DONE: ar = (AsyncResult) msg.obj; String localTemp[] = (String[]) ar.result; if (ar.exception != null) { break; } mMyMobileNumber = localTemp[0]; mMin2Min1 = localTemp[3]; mPrlVersion = localTemp[4]; Log.d(LOG_TAG, "MDN: " + mMyMobileNumber + " MIN: " + mMin2Min1); break; case EVENT_GET_ICCID_DONE: isRecordLoadResponse = true; ar = (AsyncResult) msg.obj; data = (byte[]) ar.result; if (ar.exception != null) { break; } iccid = IccUtils.bcdToString(data, 0, data.length); Log.d(LOG_TAG, "iccid: " + iccid); break; case EVENT_UPDATE_DONE: ar = (AsyncResult) msg.obj; if (ar.exception != null) { Log.i(LOG_TAG, "RuimRecords update failed", ar.exception); } break; case EVENT_GET_ALL_SMS_DONE: case EVENT_MARK_SMS_READ_DONE: case EVENT_SMS_ON_RUIM: case EVENT_GET_SMS_DONE: Log.w(LOG_TAG, "Event not supported: " + msg.what); break; // TODO: probably EF_CST should be read instead case EVENT_GET_SST_DONE: Log.d(LOG_TAG, "Event EVENT_GET_SST_DONE Received"); break; case EVENT_RUIM_REFRESH: isRecordLoadResponse = false; ar = (AsyncResult) msg.obj; if (ar.exception == null) { handleRuimRefresh((int[]) (ar.result)); } break; } } catch (RuntimeException exc) { // I don't want these exceptions to be fatal Log.w(LOG_TAG, "Exception parsing RUIM record", exc); } finally { // Count up record load responses even if they are fails if (isRecordLoadResponse) { onRecordLoaded(); } } }