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

Commit d2efa25e authored by Ricardo Cerqueira's avatar Ricardo Cerqueira
Browse files

LGEStarRIL: Fix hanging up background calls

Add a call state tracker to the RIL itself (nasty hack), and use it
to decide which request ID to use for the hangup.

Change-Id: Icb5676a1fa72a4e7e08f547700dd1ffa71b22146
parent b478e341
Loading
Loading
Loading
Loading
+26 −2
Original line number Diff line number Diff line
@@ -74,6 +74,10 @@ import android.os.SystemClock;
import java.util.Date;
import java.text.SimpleDateFormat;

import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;


/**
 * RIL implementation of the CommandsInterface.
 * FIXME public only for testing
@@ -85,6 +89,7 @@ public class LGEStarRIL extends RIL implements CommandsInterface {
        super(context);
    }

    protected int mCallState = TelephonyManager.CALL_STATE_IDLE;
    public LGEStarRIL(Context context, int networkMode, int cdmaSubscription) {
        super(context, networkMode, cdmaSubscription);
        /* The star needs to ignore SCREEN_X states, in order to keep the
@@ -107,6 +112,8 @@ public class LGEStarRIL extends RIL implements CommandsInterface {
            filter.addAction(Intent.ACTION_SCREEN_ON);
            filter.addAction(Intent.ACTION_SCREEN_OFF);
            context.registerReceiver(mIntentReceiver, filter);


        } else {
            BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
                @Override
@@ -125,6 +132,19 @@ public class LGEStarRIL extends RIL implements CommandsInterface {
            filter.addAction(Intent.ACTION_SCREEN_OFF);
            context.registerReceiver(mIntentReceiver, filter);
        }
        PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                /* Higher state wins, unless going back to idle */
                if (state == TelephonyManager.CALL_STATE_IDLE || state > mCallState)
                    mCallState = state;
            }
        };

        // register for phone state notifications.
        ((TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE))
            .listen(mPhoneStateListener,
                    PhoneStateListener.LISTEN_CALL_STATE);
    }

    protected boolean mPrepSetupPending = true;
@@ -226,11 +246,13 @@ public class LGEStarRIL extends RIL implements CommandsInterface {
     * Request ID overwrites
     */

    static final int RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND = 204;
    static final int RIL_REQUEST_HANG_UP_CALL = 204;

    public void
    hangupWaitingOrBackground (Message result) {
        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND,
        RILRequest rr = RILRequest.obtain(mCallState == TelephonyManager.CALL_STATE_OFFHOOK ?
                                        RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND :
                                        RIL_REQUEST_HANG_UP_CALL,
                                        result);

        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
@@ -433,6 +455,7 @@ public class LGEStarRIL extends RIL implements CommandsInterface {
            case RIL_REQUEST_HANGUP: ret =  responseVoid(p); break;
            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: ret =  responseVoid(p); break;
            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: ret =  responseVoid(p); break;
            case RIL_REQUEST_HANG_UP_CALL: ret =  responseVoid(p); break; /* LGE */
            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: ret =  responseVoid(p); break;
            case RIL_REQUEST_CONFERENCE: ret =  responseVoid(p); break;
            case RIL_REQUEST_UDUB: ret =  responseVoid(p); break;
@@ -1040,6 +1063,7 @@ public class LGEStarRIL extends RIL implements CommandsInterface {
            case RIL_REQUEST_HANGUP: return "HANGUP";
            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: return "HANGUP_WAITING_OR_BACKGROUND";
            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
            case RIL_REQUEST_HANG_UP_CALL: return "HANG_UP_CALL"; /* LGE */
            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: return "REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
            case RIL_REQUEST_CONFERENCE: return "CONFERENCE";
            case RIL_REQUEST_UDUB: return "UDUB";