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

Commit 903b800d authored by Jack Yu's avatar Jack Yu Committed by Gerrit Code Review
Browse files

Merge changes I32ad58bb,I18b28a3b,I5811c74f

* changes:
  Fixed that data unthrottling not working
  After data unthrottled try to setup data again
  Register for unthrottle changes
parents 78cd7974 173d6afa
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -206,6 +206,7 @@ public interface PhoneInternalInterface {
    static final String REASON_DATA_ENABLED_OVERRIDE = "dataEnabledOverride";
    static final String REASON_IWLAN_DATA_SERVICE_DIED = "iwlanDataServiceDied";
    static final String REASON_VCN_REQUESTED_TEARDOWN = "vcnRequestedTeardown";
    static final String REASON_DATA_UNTHROTTLED = "dataUnthrottled";

    // Reasons for Radio being powered off
    int RADIO_POWER_REASON_USER = 0;
+2 −0
Original line number Diff line number Diff line
@@ -228,6 +228,8 @@ public class DataServiceManager extends Handler {
                mIDataService.createDataServiceProvider(mPhone.getPhoneId());
                mIDataService.registerForDataCallListChanged(mPhone.getPhoneId(),
                        new CellularDataServiceCallback("dataCallListChanged"));
                mIDataService.registerForUnthrottleApn(mPhone.getPhoneId(),
                        new CellularDataServiceCallback("unthrottleApn"));
            } catch (RemoteException e) {
                mDeathRecipient.binderDied();
                loge("Remote exception. " + e);
+15 −6
Original line number Diff line number Diff line
@@ -856,6 +856,7 @@ public class DcTracker extends Handler {
        registerServiceStateTrackerEvents();
        mDataServiceManager.registerForServiceBindingChanged(this,
                DctConstants.EVENT_DATA_SERVICE_BINDING_CHANGED, null);
        mDataServiceManager.registerForApnUnthrottled(this, DctConstants.EVENT_APN_UNTHROTTLED);
    }

    public void dispose() {
@@ -913,6 +914,7 @@ public class DcTracker extends Handler {
        mDataServiceManager.unregisterForServiceBindingChanged(this);
        mDataEnabledSettings.unregisterForDataEnabledChanged(this);
        mDataEnabledSettings.unregisterForDataEnabledOverrideChanged(this);
        mDataServiceManager.unregisterForApnUnthrottled(this);
    }

    /**
@@ -2486,14 +2488,19 @@ public class DcTracker extends Handler {
        }
    }

    private void onApnUnthrottled(Message msg) {
        String apn = (String) msg.obj;
    private void onApnUnthrottled(String apn) {
        if (apn != null) {
            ApnContext ac = mApnContexts.get(apn);
            if (ac != null) {
                @ApnType int apnTypes = ac.getApnTypeBitmask();
            ApnSetting apnSetting = mAllApnSettings.stream()
                    .filter(as -> apn.equals(as.getApnName()))
                    .findFirst()
                    .orElse(null);
            if (apnSetting != null) {
                @ApnType int apnTypes = apnSetting.getApnTypeBitmask();
                mDataThrottler.setRetryTime(apnTypes, RetryManager.NO_SUGGESTED_RETRY_DELAY,
                        REQUEST_TYPE_NORMAL);
                // After data unthrottled, we should see if it's possible to bring up the data
                // again.
                setupDataOnAllConnectableApns(Phone.REASON_DATA_UNTHROTTLED, RetryFailures.ALWAYS);
            } else {
                loge("EVENT_APN_UNTHROTTLED: Invalid APN passed: " + apn);
            }
@@ -4098,7 +4105,9 @@ public class DcTracker extends Handler {
                onSimStateUpdated(simState);
                break;
            case DctConstants.EVENT_APN_UNTHROTTLED:
                onApnUnthrottled(msg);
                ar = (AsyncResult) msg.obj;
                String apn = (String) ar.result;
                onApnUnthrottled(apn);
                break;
            default:
                Rlog.e("DcTracker", "Unhandled event=" + msg);
+17 −0
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@ import com.android.internal.R;
import com.android.internal.telephony.DctConstants;
import com.android.internal.telephony.ISub;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.RetryManager;
import com.android.internal.telephony.TelephonyTest;

import org.junit.After;
@@ -2665,4 +2666,20 @@ public class DcTrackerTest extends TelephonyTest {
                any(Message.class), anyInt(), eq(DcTracker.REQUEST_TYPE_HANDOVER), anyInt(),
                anyBoolean());
    }

    @Test
    public void testDataUnthrottled() throws Exception {
        DataThrottler mockedDataThrottler = Mockito.mock(DataThrottler.class);
        replaceInstance(DcTracker.class, "mDataThrottler", mDct, mockedDataThrottler);
        mDct.enableApn(ApnSetting.TYPE_IMS, DcTracker.REQUEST_TYPE_NORMAL, null);
        sendInitializationEvents();
        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_APN_UNTHROTTLED,
                new AsyncResult(null, FAKE_APN3, null)));
        waitForLastHandlerAction(mDcTrackerTestHandler.getThreadHandler());

        verify(mockedDataThrottler).setRetryTime(
                eq(ApnSetting.TYPE_IMS),
                eq(RetryManager.NO_SUGGESTED_RETRY_DELAY),
                eq(DcTracker.REQUEST_TYPE_NORMAL));
    }
}