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

Commit 6a2990c5 authored by Robert Greenwalt's avatar Robert Greenwalt
Browse files

Cleanup network release

Fixes a handful of issues.  PendingRequests were getting touched on
random threads, so moved to handler thread.  Release could get
confused by state changes, so made it depend only on state set
during the request (if it's in the pending list, remove it, if it's
on the request list, release it).

bug:23080486
Change-Id: I62d3e279a34f3f3eac122842faa2abc8cb52b54c
parent ca474793
Loading
Loading
Loading
Loading
+21 −34
Original line number Diff line number Diff line
@@ -60,6 +60,8 @@ public class DctController extends Handler {
    private static final int EVENT_RELEASE_REQUEST = 103;
    private static final int EVENT_RELEASE_ALL_REQUESTS = 104;
    private static final int EVENT_RETRY_ATTACH = 105;
    private static final int EVENT_SETTINGS_CHANGED = 106;
    private static final int EVENT_SUBSCRIPTIONS_CHANGED = 107;

    private static final int EVENT_DATA_ATTACHED = 500;
    private static final int EVENT_DATA_DETACHED = 600;
@@ -89,7 +91,7 @@ public class DctController extends Handler {
            new OnSubscriptionsChangedListener() {
        @Override
        public void onSubscriptionsChanged() {
            onSubInfoReady();
            DctController.this.obtainMessage(EVENT_SUBSCRIPTIONS_CHANGED).sendToTarget();
        }
    };

@@ -97,7 +99,7 @@ public class DctController extends Handler {
        @Override
        public void onChange(boolean selfChange) {
            logd("Settings change");
            onSettingsChange();
            DctController.this.obtainMessage(EVENT_SETTINGS_CHANGED).sendToTarget();
        }
    };

@@ -294,6 +296,12 @@ public class DctController extends Handler {
            case EVENT_RETRY_ATTACH:
                onRetryAttach(msg.arg1);
                break;
            case EVENT_SETTINGS_CHANGED:
                onSettingsChanged();
                break;
            case EVENT_SUBSCRIPTIONS_CHANGED:
                onSubInfoReady();
                break;
            default:
                loge("Un-handled message [" + msg.what + "]");
        }
@@ -446,7 +454,7 @@ public class DctController extends Handler {
        }
    }

    private void onSettingsChange() {
    private void onSettingsChanged() {
        //Sub Selection
        long dataSubId = mSubController.getDefaultDataSubId();

@@ -711,15 +719,15 @@ public class DctController extends Handler {

            final LocalLog l = addLogger(networkRequest);

            if (!SubscriptionManager.isUsableSubIdValue(mPhone.getSubId())) {
                final String str = "SubId not useable, pending request.";
            if (!SubscriptionManager.isUsableSubIdValue(mPhone.getSubId()) ||
                    getRequestPhoneId(networkRequest) != mPhone.getPhoneId()) {
                final String str = "Request not useable, pending request.";
                log(str);
                l.log(str);
                mPendingReq.put(networkRequest.requestId, networkRequest);
                return;
            }

            if (getRequestPhoneId(networkRequest) == mPhone.getPhoneId()) {
            DcTrackerBase dcTracker =((PhoneBase)mPhone).mDcTracker;
            String apn = apnForNetworkRequest(networkRequest);
            if (dcTracker.isApnSupported(apn)) {
@@ -729,12 +737,6 @@ public class DctController extends Handler {
                log(str);
                l.log(str);
            }
            } else {
                final String str = "Request not send, put to pending";
                log(str);
                l.log(str);
                mPendingReq.put(networkRequest.requestId, networkRequest);
            }
        }

        @Override
@@ -743,7 +745,7 @@ public class DctController extends Handler {
            log(str + networkRequest);
            final LocalLog l = requestLog(networkRequest.requestId, str);

            if (!SubscriptionManager.isUsableSubIdValue(mPhone.getSubId())) {
            if (mPendingReq.get(networkRequest.requestId) != null) {
                str = "Sub Info has not been ready, remove request.";
                log(str);
                if (l != null) l.log(str);
@@ -751,22 +753,7 @@ public class DctController extends Handler {
                return;
            }

            if (getRequestPhoneId(networkRequest) == mPhone.getPhoneId()) {
                DcTrackerBase dcTracker =((PhoneBase)mPhone).mDcTracker;
                String apn = apnForNetworkRequest(networkRequest);
                if (dcTracker.isApnSupported(apn)) {
            releaseNetwork(networkRequest);
                } else {
                    str = "Unsupported APN";
                    log(str);
                    if (l != null) l.log(str);
                }

            } else {
                str = "Request not released";
                log(str);
                if (l != null) l.log(str);
            }
        }

        @Override