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

Commit fbfeddc3 authored by Jiju Kinattingal's avatar Jiju Kinattingal Committed by Susheel nyamala
Browse files

Fix to avoid Out of State Indications to apps

During the Out Of Service (OOS) bursts, an existing data connection is
reported as disconnected and the corresponding link properties are
removed, resulting in data connection loss.

We need to ignore OOS bursts. If the service is indeed lost, data call
disconnect indication will be sent by modem, else we will wait
optimistically for a quick reattach.

Add a system property to ignore out of service bursts.

Change-Id: I36f709b4cfc04a68542ec64c905f0850d2db231d
CRs-Fixed: 593413
parent 3ff9afd6
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -77,6 +77,11 @@ import static com.android.internal.telephony.MSimConstants.DEFAULT_SUBSCRIPTION;
public abstract class PhoneBase extends Handler implements Phone {
    private static final String LOG_TAG = "PhoneBase";

    /**
     * Indicates whether Out Of Service is considered as data call disconnect.
     */
    protected static final String PROPERTY_OOS_IS_DISCONNECT = "persist.telephony.oosisdc";

    // Key used to read and write the saved network selection numeric value
    public static final String NETWORK_SELECTION_KEY = "network_selection_key";
    // Key used to read and write the saved network selection operator name
@@ -182,6 +187,10 @@ public abstract class PhoneBase extends Handler implements Phone {
        return mActionAttached;
    }

    // Flag that indicates that Out Of Service is considered as data call disconnect
    protected boolean mOosIsDisconnect = SystemProperties.getBoolean(
            PROPERTY_OOS_IS_DISCONNECT, false);

    /**
     * Set a system property, unless we're in unit test mode
     */
@@ -320,6 +329,7 @@ public abstract class PhoneBase extends Handler implements Phone {
        mSmsUsageMonitor = new SmsUsageMonitor(context);
        mUiccController = UiccController.getInstance();
        mUiccController.registerForIccChanged(this, EVENT_ICC_CHANGED, null);
        Rlog.d(LOG_TAG, "mOosIsDisconnect=" + mOosIsDisconnect);
    }

    @Override
+5 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.os.Message;
import android.preference.PreferenceManager;
import android.provider.Telephony;
import android.telephony.Rlog;
import android.telephony.ServiceState;

import com.android.internal.telephony.CommandsInterface;

@@ -112,6 +113,10 @@ public class CDMALTEPhone extends CDMAPhone {
            // removeReferences() have already been called

            ret = PhoneConstants.DataState.DISCONNECTED;
        } else if (mSST.getCurrentDataConnectionState() != ServiceState.STATE_IN_SERVICE &&
                            mOosIsDisconnect) {
            ret = PhoneConstants.DataState.DISCONNECTED;
            log("getDataConnectionState: Data is Out of Service. ret = " + ret);
        } else if (mDcTracker.isApnTypeEnabled(apnType) == false) {
            ret = PhoneConstants.DataState.DISCONNECTED;
        } else {
+3 −1
Original line number Diff line number Diff line
@@ -715,10 +715,12 @@ public class CDMAPhone extends PhoneBase {
             // already been called

             ret = PhoneConstants.DataState.DISCONNECTED;
        } else if (mSST.getCurrentDataConnectionState() != ServiceState.STATE_IN_SERVICE) {
        } else if (mSST.getCurrentDataConnectionState() != ServiceState.STATE_IN_SERVICE
                && mOosIsDisconnect) {
            // If we're out of service, open TCP sockets may still work
            // but no data will flow
            ret = PhoneConstants.DataState.DISCONNECTED;
            log("getDataConnectionState: Data is Out of Service. ret = " + ret);
        } else if (mDcTracker.isApnTypeEnabled(apnType) == false ||
                mDcTracker.isApnTypeActive(apnType) == false) {
            ret = PhoneConstants.DataState.DISCONNECTED;
+3 −1
Original line number Diff line number Diff line
@@ -335,10 +335,12 @@ public class GSMPhone extends PhoneBase {

            ret = PhoneConstants.DataState.DISCONNECTED;
        } else if (mSST.getCurrentDataConnectionState()
                != ServiceState.STATE_IN_SERVICE) {
                != ServiceState.STATE_IN_SERVICE
                && mOosIsDisconnect) {
            // If we're out of service, open TCP sockets may still work
            // but no data will flow
            ret = PhoneConstants.DataState.DISCONNECTED;
            Rlog.d(LOG_TAG, "getDataConnectionState: Data is Out of Service. ret = " + ret);
        } else if (mDcTracker.isApnTypeEnabled(apnType) == false ||
                mDcTracker.isApnTypeActive(apnType) == false) {
            //TODO: isApnTypeActive() is just checking whether ApnContext holds