Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9525a527 authored by Pawit Pornkitprasan's avatar Pawit Pornkitprasan
Browse files

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
parent ff0840d9
Loading
Loading
Loading
Loading
+8 −279
Original line number Diff line number Diff line
@@ -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);

@@ -536,152 +435,6 @@ public class SamsungRIL extends RIL implements CommandsInterface {
                                    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));
            }
            break;

        case RIL_UNSOL_CDMA_INFO_REC:
            ArrayList<CdmaInformationRecords> listInfoRecs;
@@ -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);