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

Commit 3195d8c5 authored by Naveen Kalla's avatar Naveen Kalla Committed by Ricardo Cerqueira
Browse files

Telephony: Add DORMANT state to GSM data link activity

GsmDataConnectionTracker sets its activity flag to DORMANT and notifies
LinkActivity when RIL indicates that all its data calls are in
dormant state (i.e. active is set to 1 in UNSOL_DATA_CALL_LIST_CHANGED
message for all data calls)

CRs-Fixed: 332606
(cherry picked from commit 6b57c3b68d989d6b8f114c5f87dac6fc2c13a5f5)

Change-Id: I1d4b9fd24c4049a938d62f08b7720d47400ad7e1
parent 733432ca
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -150,6 +150,14 @@ public abstract class DataConnectionTracker extends Handler {
    public static final int DISABLED = 0;
    public static final int ENABLED = 1;

    /**
     * Constants for the data connection activity:
     * physical link down/up
     */
    protected static final int DATA_CONNECTION_ACTIVE_PH_LINK_INACTIVE = 0;
    protected static final int DATA_CONNECTION_ACTIVE_PH_LINK_DOWN = 1;
    protected static final int DATA_CONNECTION_ACTIVE_PH_LINK_UP = 2;

    public static final String APN_TYPE_KEY = "apnType";

    /** Delay between APN attempts.
+4 −0
Original line number Diff line number Diff line
@@ -350,6 +350,10 @@ public class GSMPhone extends PhoneBase {
                case DATAINANDOUT:
                    ret = DataActivityState.DATAINANDOUT;
                break;

                case DORMANT:
                    ret = DataActivityState.DORMANT;
                break;
            }
        }

+29 −1
Original line number Diff line number Diff line
@@ -1211,6 +1211,9 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {

        dataCallStates = clearDuplicates(dataCallStates);

        boolean isAnyDataCallDormant = false;
        boolean isAnyDataCallActive = false;

        // Create a hash map to store the dataCallState of each DataConnectionAc
        HashMap<DataCallState, DataConnectionAc> dataCallStateToDcac;
        dataCallStateToDcac = new HashMap<DataCallState, DataConnectionAc>();
@@ -1232,6 +1235,9 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
                continue;
            }

            if (newState.active == DATA_CONNECTION_ACTIVE_PH_LINK_UP) isAnyDataCallActive = true;
            if (newState.active == DATA_CONNECTION_ACTIVE_PH_LINK_DOWN) isAnyDataCallDormant = true;

            // The list of apn's associated with this DataConnection
            Collection<ApnContext> apns = dcac.getApnListSync();

@@ -1312,6 +1318,28 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
            }
        }

        if (isAnyDataCallDormant && !isAnyDataCallActive) {
            // There is no way to indicate link activity per APN right now. So
            // Link Activity will be considered dormant only when all data calls
            // are dormant.
            // If a single data call is in dormant state and none of the data
            // calls are active broadcast overall link state as dormant.
            mActivity = Activity.DORMANT;
            if (DBG) {
                log("onDataStateChanged: Data Activity updated to DORMANT. stopNetStatePoll");
            }
            stopNetStatPoll();
        } else {
            mActivity = Activity.NONE;
            if (DBG) {
                log("onDataStateChanged: Data Activity updated to NONE. " +
                         "isAnyDataCallActive = " + isAnyDataCallActive +
                         " isAnyDataCallDormant = " + isAnyDataCallDormant);
            }
            if (isAnyDataCallActive) startNetStatPoll();
        }
        mPhone.notifyDataActivity();

        if (apnsToCleanup.size() != 0) {
            // Add an event log when the network drops PDP
            int cid = getCellLocationId();
@@ -1546,7 +1574,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
            } else if (sent == 0 && received > 0) {
                newActivity = Activity.DATAIN;
            } else {
                newActivity = Activity.NONE;
                newActivity = (mActivity == Activity.DORMANT) ? mActivity : Activity.NONE;
            }

            if (mActivity != newActivity && mIsScreenOn) {