From 9525a5276517fcf3ccf7a23beb90311e43167124 Mon Sep 17 00:00:00 2001 From: Pawit Pornkitprasan Date: Wed, 18 Jul 2012 10:54:08 +0700 Subject: stk functionality for SamsungRIL * Implemented SMS based SIM application functionality * PatchSet 3: Added fix so unknown unsolicited response are sent to super class * PatchSet 4: Removed "import android.content.resources" - not needed any more * PatchSet 5: processUnsolicited cleanup, using super class standard states where possible * Patchset 6: Rebased Change-Id: I9bf844da1480fe442f851fb20d99b530b96cfa4c --- .../com/android/internal/telephony/SamsungRIL.java | 287 +-------------------- 1 file changed, 8 insertions(+), 279 deletions(-) diff --git a/telephony/java/com/android/internal/telephony/SamsungRIL.java b/telephony/java/com/android/internal/telephony/SamsungRIL.java index fca571c..fa19714 100644 --- a/telephony/java/com/android/internal/telephony/SamsungRIL.java +++ b/telephony/java/com/android/internal/telephony/SamsungRIL.java @@ -65,7 +65,6 @@ public class SamsungRIL extends RIL implements CommandsInterface { } // SAMSUNG SGS STATES - static final int RIL_UNSOL_STK_SEND_SMS_RESULT = 11002; static final int RIL_UNSOL_O2_HOME_ZONE_INFO = 11007; static final int RIL_UNSOL_DEVICE_READY_NOTI = 11008; static final int RIL_UNSOL_GPS_NOTI = 11009; @@ -337,53 +336,26 @@ public class SamsungRIL extends RIL implements CommandsInterface { processUnsolicited (Parcel p) { int response; Object ret; + int dataPosition = p.dataPosition(); response = p.readInt(); - try {switch(response) { + switch(response) { /* cat libs/telephony/ril_unsol_commands.h \ | egrep "^ *{RIL_" \ | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: \2(rr, p); break;/' */ - case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: ret = responseVoid(p); break; - case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: ret = responseVoid(p); break; - case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: ret = responseVoid(p); break; - case RIL_UNSOL_RESPONSE_NEW_SMS: ret = responseString(p); break; - case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: ret = responseString(p); break; - case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: ret = responseInts(p); break; - case RIL_UNSOL_ON_USSD: ret = responseStrings(p); break; case RIL_UNSOL_NITZ_TIME_RECEIVED: ret = responseString(p); break; case RIL_UNSOL_SIGNAL_STRENGTH: ret = responseSignalStrength(p); break; - case RIL_UNSOL_DATA_CALL_LIST_CHANGED: ret = responseDataCallList(p);break; - case RIL_UNSOL_SUPP_SVC_NOTIFICATION: ret = responseSuppServiceNotification(p); break; - case RIL_UNSOL_STK_SESSION_END: ret = responseVoid(p); break; - case RIL_UNSOL_STK_PROACTIVE_COMMAND: ret = responseString(p); break; - case RIL_UNSOL_STK_EVENT_NOTIFY: ret = responseString(p); break; - case RIL_UNSOL_STK_CALL_SETUP: ret = responseInts(p); break; - case RIL_UNSOL_SIM_SMS_STORAGE_FULL: ret = responseVoid(p); break; - case RIL_UNSOL_SIM_REFRESH: ret = responseInts(p); break; - case RIL_UNSOL_CALL_RING: ret = responseCallRing(p); break; - case RIL_UNSOL_RESTRICTED_STATE_CHANGED: ret = responseInts(p); break; - case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: ret = responseVoid(p); break; - case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: ret = responseCdmaSms(p); break; - case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: ret = responseString(p); break; - case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: ret = responseVoid(p); break; - case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break; - case RIL_UNSOL_CDMA_CALL_WAITING: ret = responseCdmaCallWaiting(p); break; - case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: ret = responseInts(p); break; case RIL_UNSOL_CDMA_INFO_REC: ret = responseCdmaInformationRecord(p); break; - case RIL_UNSOL_OEM_HOOK_RAW: ret = responseRaw(p); break; - case RIL_UNSOL_RINGBACK_TONE: ret = responseInts(p); break; - case RIL_UNSOL_RESEND_INCALL_MUTE: ret = responseVoid(p); break; case RIL_UNSOL_HSDPA_STATE_CHANGED: ret = responseInts(p); break; //fixing anoying Exceptions caused by the new Samsung states //FIXME figure out what the states mean an what data is in the parcel case RIL_UNSOL_O2_HOME_ZONE_INFO: ret = responseVoid(p); break; - case RIL_UNSOL_STK_SEND_SMS_RESULT: ret = responseVoid(p); break; case RIL_UNSOL_DEVICE_READY_NOTI: ret = responseVoid(p); break; case RIL_UNSOL_GPS_NOTI: ret = responseVoid(p); break; // Ignored in TW RIL. case RIL_UNSOL_SAMSUNG_UNKNOWN_MAGIC_REQUEST: ret = responseVoid(p); break; @@ -391,28 +363,15 @@ public class SamsungRIL extends RIL implements CommandsInterface { case RIL_UNSOL_AM: ret = responseString(p); break; default: - throw new RuntimeException("Unrecognized unsol response: " + response); - //break; (implied) - }} catch (Throwable tr) { - Log.e(LOG_TAG, "Exception processing unsol response: " + response + - "Exception:" + tr.toString()); + // Rewind the Parcel + p.setDataPosition(dataPosition); + + // Forward responses that we are not overriding to the super class + super.processUnsolicited(p); return; } switch(response) { - case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: - /* has bonus radio state int */ - RadioState newState = getRadioStateFromInt(p.readInt()); - if (RILJ_LOGD) unsljLogMore(response, newState.toString()); - - switchToRadioState(newState); - break; - case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: - if (RILJ_LOGD) unsljLog(response); - - mCallStateRegistrants - .notifyRegistrants(new AsyncResult(null, null, null)); - break; case RIL_UNSOL_HSDPA_STATE_CHANGED: if (RILJ_LOGD) unsljLog(response); @@ -433,66 +392,6 @@ public class SamsungRIL extends RIL implements CommandsInterface { } break; - case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: - if (RILJ_LOGD) unsljLog(response); - - mVoiceNetworkStateRegistrants - .notifyRegistrants(new AsyncResult(null, null, null)); - break; - case RIL_UNSOL_RESPONSE_NEW_SMS: { - if (RILJ_LOGD) unsljLog(response); - - // FIXME this should move up a layer - String a[] = new String[2]; - - a[1] = (String)ret; - - SmsMessage sms; - - sms = SmsMessage.newFromCMT(a); - if (mGsmSmsRegistrant != null) { - mGsmSmsRegistrant - .notifyRegistrant(new AsyncResult(null, sms, null)); - } - break; - } - case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: - if (RILJ_LOGD) unsljLogRet(response, ret); - - if (mSmsStatusRegistrant != null) { - mSmsStatusRegistrant.notifyRegistrant( - new AsyncResult(null, ret, null)); - } - break; - case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: - if (RILJ_LOGD) unsljLogRet(response, ret); - - int[] smsIndex = (int[])ret; - - if(smsIndex.length == 1) { - if (mSmsOnSimRegistrant != null) { - mSmsOnSimRegistrant. - notifyRegistrant(new AsyncResult(null, smsIndex, null)); - } - } else { - if (RILJ_LOGD) riljLog(" NEW_SMS_ON_SIM ERROR with wrong length " - + smsIndex.length); - } - break; - case RIL_UNSOL_ON_USSD: - String[] resp = (String[])ret; - - if (resp.length < 2) { - resp = new String[2]; - resp[0] = ((String[])ret)[0]; - resp[1] = null; - } - if (RILJ_LOGD) unsljLogMore(response, resp[0]); - if (mUSSDRegistrant != null) { - mUSSDRegistrant.notifyRegistrant( - new AsyncResult (null, resp, null)); - } - break; case RIL_UNSOL_NITZ_TIME_RECEIVED: if (RILJ_LOGD) unsljLogRet(response, ret); @@ -533,153 +432,7 @@ public class SamsungRIL extends RIL implements CommandsInterface { if (mSignalStrengthRegistrant != null) { mSignalStrengthRegistrant.notifyRegistrant( - new AsyncResult (null, ret, null)); - } - break; - case RIL_UNSOL_DATA_CALL_LIST_CHANGED: - if (RILJ_LOGD) unsljLogRet(response, ret); - - mDataNetworkStateRegistrants.notifyRegistrants(new AsyncResult(null, ret, null)); - break; - - case RIL_UNSOL_SUPP_SVC_NOTIFICATION: - if (RILJ_LOGD) unsljLogRet(response, ret); - - if (mSsnRegistrant != null) { - mSsnRegistrant.notifyRegistrant( - new AsyncResult (null, ret, null)); - } - break; - - case RIL_UNSOL_STK_SESSION_END: - if (RILJ_LOGD) unsljLog(response); - - if (mCatSessionEndRegistrant != null) { - mCatSessionEndRegistrant.notifyRegistrant( - new AsyncResult (null, ret, null)); - } - break; - - case RIL_UNSOL_STK_PROACTIVE_COMMAND: - if (RILJ_LOGD) unsljLogRet(response, ret); - - if (mCatProCmdRegistrant != null) { - mCatProCmdRegistrant.notifyRegistrant( - new AsyncResult (null, ret, null)); - } - break; - - case RIL_UNSOL_STK_EVENT_NOTIFY: - if (RILJ_LOGD) unsljLogRet(response, ret); - - if (mCatEventRegistrant != null) { - mCatEventRegistrant.notifyRegistrant( - new AsyncResult (null, ret, null)); - } - break; - - case RIL_UNSOL_STK_CALL_SETUP: - if (RILJ_LOGD) unsljLogRet(response, ret); - - if (mCatCallSetUpRegistrant != null) { - mCatCallSetUpRegistrant.notifyRegistrant( - new AsyncResult (null, ret, null)); - } - break; - - case RIL_UNSOL_SIM_SMS_STORAGE_FULL: - if (RILJ_LOGD) unsljLog(response); - - if (mIccSmsFullRegistrant != null) { - mIccSmsFullRegistrant.notifyRegistrant(); - } - break; - - case RIL_UNSOL_SIM_REFRESH: - if (RILJ_LOGD) unsljLogRet(response, ret); - - if (mIccRefreshRegistrants != null) { - mIccRefreshRegistrants.notifyRegistrants( - new AsyncResult (null, ret, null)); - } - break; - - case RIL_UNSOL_CALL_RING: - if (RILJ_LOGD) unsljLogRet(response, ret); - - if (mRingRegistrant != null) { - mRingRegistrant.notifyRegistrant( - new AsyncResult (null, ret, null)); - } - break; - - case RIL_UNSOL_RESTRICTED_STATE_CHANGED: - if (RILJ_LOGD) unsljLogvRet(response, ret); - if (mRestrictedStateRegistrant != null) { - mRestrictedStateRegistrant.notifyRegistrant( - new AsyncResult (null, ret, null)); - } - break; - - case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: - if (RILJ_LOGD) unsljLog(response); - - if (mIccStatusChangedRegistrants != null) { - mIccStatusChangedRegistrants.notifyRegistrants(); - } - break; - - case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: - if (RILJ_LOGD) unsljLog(response); - - SmsMessage sms = (SmsMessage) ret; - - if (mCdmaSmsRegistrant != null) { - mCdmaSmsRegistrant - .notifyRegistrant(new AsyncResult(null, sms, null)); - } - break; - - case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: - if (RILJ_LOGD) unsljLog(response); - - if (mGsmBroadcastSmsRegistrant != null) { - mGsmBroadcastSmsRegistrant - .notifyRegistrant(new AsyncResult(null, ret, null)); - } - break; - - case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: - if (RILJ_LOGD) unsljLog(response); - - if (mIccSmsFullRegistrant != null) { - mIccSmsFullRegistrant.notifyRegistrant(); - } - break; - - case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: - if (RILJ_LOGD) unsljLog(response); - - if (mEmergencyCallbackModeRegistrant != null) { - mEmergencyCallbackModeRegistrant.notifyRegistrant(); - } - break; - - case RIL_UNSOL_CDMA_CALL_WAITING: - if (RILJ_LOGD) unsljLogRet(response, ret); - - if (mCallWaitingInfoRegistrants != null) { - mCallWaitingInfoRegistrants.notifyRegistrants( - new AsyncResult (null, ret, null)); - } - break; - - case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: - if (RILJ_LOGD) unsljLogRet(response, ret); - - if (mOtaProvisionRegistrants != null) { - mOtaProvisionRegistrants.notifyRegistrants( - new AsyncResult (null, ret, null)); + new AsyncResult (null, ret, null)); } break; @@ -699,30 +452,6 @@ public class SamsungRIL extends RIL implements CommandsInterface { } break; - case RIL_UNSOL_OEM_HOOK_RAW: - if (RILJ_LOGD) unsljLogvRet(response, IccUtils.bytesToHexString((byte[])ret)); - if (mUnsolOemHookRawRegistrant != null) { - mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, ret, null)); - } - break; - - case RIL_UNSOL_RINGBACK_TONE: - if (RILJ_LOGD) unsljLogvRet(response, ret); - if (mRingbackToneRegistrants != null) { - boolean playtone = (((int[])ret)[0] == 1); - mRingbackToneRegistrants.notifyRegistrants( - new AsyncResult (null, playtone, null)); - } - break; - - case RIL_UNSOL_RESEND_INCALL_MUTE: - if (RILJ_LOGD) unsljLogRet(response, ret); - - if (mResendIncallMuteRegistrants != null) { - mResendIncallMuteRegistrants.notifyRegistrants( - new AsyncResult (null, ret, null)); - } - break; case RIL_UNSOL_AM: String amString = (String) ret; Log.d(LOG_TAG, "Executing AM: " + amString); -- cgit v1.1