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

Commit 4d8b2c56 authored by Hunsuk Choi's avatar Hunsuk Choi Committed by Android (Google) Code Review
Browse files

Merge changes from topic "cherrypicker-L75200000955155814:N33400001274392636"

* changes:
  Update CallWaitingController, SYNC_IMS_ONLY
  Add EVENT_CARRIER_CONFIG_CHANGED to CallWaitingController
  Hangup CS waiting calls when call waiting is disabled
  Add dump to CallWaitingController
  Update CallWaitingController, SYNC_FIRST_CHANGE
  Update CallWaitingController, SYNC_FIRST_POWER_UP
  Update CallWaitingController, SYNC_USER_CHANGE
  Implement the terminal-based call waiting
parents 61f860be 7ead8b90
Loading
Loading
Loading
Loading
+685 −0

File added.

Preview size limit exceeded, changes collapsed.

+23 −0
Original line number Diff line number Diff line
@@ -967,6 +967,8 @@ public class GsmCdmaCallTracker extends CallTracker {
                            } else {
                                newUnknownConnectionCdma = mConnections[i];
                            }
                        } else if (hangupWaitingCallSilently(i)) {
                            return;
                        }
                    }
                }
@@ -1018,6 +1020,9 @@ public class GsmCdmaCallTracker extends CallTracker {

                if (mConnections[i].getCall() == mRingingCall) {
                    newRinging = mConnections[i];
                    if (hangupWaitingCallSilently(i)) {
                        return;
                    }
                } // else something strange happened
                hasNonHangupStateChanged = true;
            } else if (conn != null && dc != null) { /* implicit conn.compareTo(dc) */
@@ -1909,4 +1914,22 @@ public class GsmCdmaCallTracker extends CallTracker {
    public void cleanupCalls() {
        pollCallsWhenSafe();
    }

    private boolean hangupWaitingCallSilently(int index) {
        if (index < 0 || index >= mConnections.length) return false;

        GsmCdmaConnection newRinging = mConnections[index];
        if (newRinging == null) return false;

        if ((mPhone.getTerminalBasedCallWaitingState(true)
                        == CallWaitingController.TERMINAL_BASED_NOT_ACTIVATED)
                && (newRinging.getState() == Call.State.WAITING)) {
            Rlog.d(LOG_TAG, "hangupWaitingCallSilently");
            newRinging.dispose();
            mConnections[index] = null;
            mCi.hangupWaitingOrBackground(obtainCompleteMessage());
            return true;
        }
        return false;
    }
}
+33 −1
Original line number Diff line number Diff line
@@ -283,6 +283,7 @@ public class GsmCdmaPhone extends Phone {
    private final CarrierPrivilegesTracker mCarrierPrivilegesTracker;

    private final SubscriptionManager.OnSubscriptionsChangedListener mSubscriptionsChangedListener;
    private final CallWaitingController mCallWaitingController;

    // Constructors

@@ -388,6 +389,8 @@ public class GsmCdmaPhone extends Phone {
                .inject(LinkBandwidthEstimator.class.getName())
                .makeLinkBandwidthEstimator(this);

        mCallWaitingController = new CallWaitingController(this);

        loadTtyMode();

        CallManager.getInstance().registerPhone(this);
@@ -2728,6 +2731,8 @@ public class GsmCdmaPhone extends Phone {
            return;
        }

        if (mCallWaitingController.getCallWaiting(onComplete)) return;

        Phone imsPhone = mImsPhone;
        if (useSsOverUt(SS_CW)) {
            if (useSsOverUt(onComplete)) {
@@ -2784,6 +2789,8 @@ public class GsmCdmaPhone extends Phone {
            return;
        }

        if (mCallWaitingController.setCallWaiting(enable, serviceClass, onComplete)) return;

        Phone imsPhone = mImsPhone;
        if (useSsOverUt(SS_CW)) {
            if (useSsOverUt(onComplete)) {
@@ -2818,6 +2825,23 @@ public class GsmCdmaPhone extends Phone {
        }
    }

    @Override
    public int getTerminalBasedCallWaitingState(boolean forCsOnly) {
        return mCallWaitingController.getTerminalBasedCallWaitingState(forCsOnly);
    }

    @Override
    public void setTerminalBasedCallWaitingStatus(int state) {
        if (mImsPhone != null) {
            mImsPhone.setTerminalBasedCallWaitingStatus(state);
        }
    }

    @Override
    public void setTerminalBasedCallWaitingSupported(boolean supported) {
        mCallWaitingController.setTerminalBasedCallWaitingSupported(supported);
    }

    @Override
    public void getAvailableNetworks(Message response) {
        if (isPhoneTypeGsm() || isPhoneTypeCdmaLte()) {
@@ -4439,6 +4463,7 @@ public class GsmCdmaPhone extends Phone {
    @Override
    public void setImsRegistrationState(boolean registered) {
        mSST.setImsRegistrationState(registered);
        mCallWaitingController.setImsRegistrationState(registered);
    }

    @Override
@@ -4508,6 +4533,13 @@ public class GsmCdmaPhone extends Phone {
            e.printStackTrace();
        }
        pw.flush();

        try {
            mCallWaitingController.dump(pw);
        } catch (Exception e) {
            e.printStackTrace();
        }
        pw.flush();
    }

    @Override
+21 −0
Original line number Diff line number Diff line
@@ -4984,6 +4984,27 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        return mNewDataStackEnabled;
    }

    /**
     * Returns the user's last setting for terminal-based call waiting
     * @param forCsOnly indicates the caller expects the result for CS calls only
     */
    public int getTerminalBasedCallWaitingState(boolean forCsOnly) {
        return CallWaitingController.TERMINAL_BASED_NOT_SUPPORTED;
    }

    /**
     * Notifies the change of the user setting of the terminal-based call waiting service
     * to IMS service.
     */
    public void setTerminalBasedCallWaitingStatus(int state) {
    }

    /**
     * Notifies that the IMS service connected supports the terminal-based call waiting service
     */
    public void setTerminalBasedCallWaitingSupported(boolean supported) {
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("Phone: subId=" + getSubId());
        pw.println(" mPhoneId=" + mPhoneId);
+17 −2
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import android.text.TextUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.CallForwardInfo;
import com.android.internal.telephony.CallStateException;
import com.android.internal.telephony.CallWaitingController;
import com.android.internal.telephony.CommandException;
import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.GsmCdmaPhone;
@@ -1183,11 +1184,25 @@ public final class GsmMmiCode extends Handler implements MmiCode {
                int serviceClass = siToServiceClass(mSia);

                if (isActivate() || isDeactivate()) {
                    if (serviceClass == SERVICE_CLASS_NONE
                            || (serviceClass & SERVICE_CLASS_VOICE) == SERVICE_CLASS_VOICE) {
                        if (mPhone.getTerminalBasedCallWaitingState(true)
                                != CallWaitingController.TERMINAL_BASED_NOT_SUPPORTED) {
                            mPhone.setCallWaiting(isActivate(), serviceClass,
                                    obtainMessage(EVENT_SET_COMPLETE, this));
                            return;
                        }
                    }
                    mPhone.mCi.setCallWaiting(isActivate(), serviceClass,
                            obtainMessage(EVENT_SET_COMPLETE, this));
                } else if (isInterrogate()) {
                    if (mPhone.getTerminalBasedCallWaitingState(true)
                            != CallWaitingController.TERMINAL_BASED_NOT_SUPPORTED) {
                        mPhone.getCallWaiting(obtainMessage(EVENT_QUERY_COMPLETE, this));
                    } else {
                        mPhone.mCi.queryCallWaiting(serviceClass,
                                obtainMessage(EVENT_QUERY_COMPLETE, this));
                    }
                } else {
                    throw new RuntimeException ("Invalid or Unsupported MMI Code");
                }
Loading