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

Commit f860f85c authored by Wink Saville's avatar Wink Saville Committed by The Android Automerger
Browse files

DO NOT MERGE: MDST is not ready until connected to DcTracker.

When the system becomes loaded the PhoneApp can be delayed
significantly and a call to setEnableFailFastMobileData may not
occur because the channel between the MobileDataStateTracker (MDST)
and DcTracker (DCT) is not connected.

Solution: Add a isReady to MDST and isMobileDataStateTrackerReady to
ConnectivityService and call it from isMobileOk.

Bug: 10351868
Change-Id: I92f9d58121b88186b636cd71c2fd2ef9a28f7cf6
parent aa2e3619
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -375,6 +375,13 @@ public class MobileDataStateTracker implements NetworkStateTracker {
        return (setEnableApn(mApnType, false) != PhoneConstants.APN_REQUEST_FAILED);
    }

    /**
     * @return true if this is ready to operate
     */
    public boolean isReady() {
        return mDataConnectionTrackerAc != null;
    }

    @Override
    public void captivePortalCheckComplete() {
        // not implemented
+23 −5
Original line number Diff line number Diff line
@@ -3572,6 +3572,12 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                         enabled));
    }

    private boolean isMobileDataStateTrackerReady() {
        MobileDataStateTracker mdst =
                (MobileDataStateTracker) mNetTrackers[ConnectivityManager.TYPE_MOBILE];
        return (mdst != null) && (mdst.isReady());
    }

    @Override
    public int checkMobileProvisioning(boolean sendNotification, int suggestedTimeOutMs,
            final ResultReceiver resultReceiver) {
@@ -3739,13 +3745,25 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            }

            try {
                // Continue trying to connect until time has run out
                long endTime = SystemClock.elapsedRealtime() + params.mTimeOutMs;

                if (!mCs.isMobileDataStateTrackerReady()) {
                    // Wait for MobileDataStateTracker to be ready.
                    if (DBG) log("isMobileOk: mdst is not ready");
                    while(SystemClock.elapsedRealtime() < endTime) {
                        if (mCs.isMobileDataStateTrackerReady()) {
                            // Enable fail fast as we'll do retries here and use a
                            // hipri connection so the default connection stays active.
                log("isMobileOk: start hipri url=" + params.mUrl);
                            if (DBG) log("isMobileOk: mdst ready, enable fail fast of mobile data");
                            mCs.setEnableFailFastMobileData(DctConstants.ENABLED);
                            break;
                        }
                        sleep(1);
                    }
                }

                // Continue trying to connect until time has run out
                long endTime = SystemClock.elapsedRealtime() + params.mTimeOutMs;
                log("isMobileOk: start hipri url=" + params.mUrl);

                // First wait until we can start using hipri
                Binder binder = new Binder();