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

Commit 0798416a authored by Ling Ma's avatar Ling Ma Committed by Android (Google) Code Review
Browse files

Merge "Add config_enable_iwlan_handover_policy flag to allow ignoring handover...

Merge "Add config_enable_iwlan_handover_policy flag to allow ignoring handover policies defined by carriers" into tm-dev
parents 7d195dbf 6652d120
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -717,6 +717,15 @@ public class DataConfigManager extends Handler {
                .config_wlan_data_service_conn_persistence_on_restart);
    }

    /**
     * @return {@code true} if adopt predefined IWLAN handover policy. If {@code false}, handover is
     * allowed by default.
     */
    public boolean isIwlanHandoverPolicyEnabled() {
        return mResources.getBoolean(com.android.internal.R.bool
                .config_enable_iwlan_handover_policy);
    }

    /**
     * @return {@code true} if tearing down IMS data network should be delayed until the voice call
     * ends.
@@ -967,6 +976,7 @@ public class DataConfigManager extends Handler {
        pw.increaseIndent();
        mDataSetupRetryRules.forEach(pw::println);
        pw.decreaseIndent();
        pw.println("isIwlanHandoverPolicyEnabled=" + isIwlanHandoverPolicyEnabled());
        pw.println("Data handover retry rules:");
        pw.increaseIndent();
        mDataHandoverRetryRules.forEach(pw::println);
+41 −35
Original line number Diff line number Diff line
@@ -1707,6 +1707,7 @@ public class DataNetworkController extends Handler {
            return dataEvaluation;
        }

        if (mDataConfigManager.isIwlanHandoverPolicyEnabled()) {
            List<HandoverRule> handoverRules = mDataConfigManager.getHandoverRules();

            int sourceAccessNetwork = DataUtils.networkTypeToAccessNetworkType(
@@ -1727,7 +1728,8 @@ public class DataNetworkController extends Handler {

                if (rule.sourceAccessNetworks.contains(sourceAccessNetwork)
                        && rule.targetAccessNetworks.contains(targetAccessNetwork)) {
                // if no capability rule specified, data network capability is considered matched.
                    // if no capability rule specified,
                    // data network capability is considered matched.
                    // otherwise, any capabilities overlap is also considered matched.
                    if (rule.networkCapabilities.isEmpty()
                            || rule.networkCapabilities.stream()
@@ -1744,10 +1746,14 @@ public class DataNetworkController extends Handler {
                    }
                }
            }
            log("evaluateDataNetworkHandover: Did not find matching rule.");
        } else {
            log("evaluateDataNetworkHandover: IWLAN handover policy not enabled.");
        }

        log("evaluateDataNetworkHandover: Did not find matching rule. " + dataEvaluation);
        // Allow handover anyway if no rule is found.
        // Allow handover by default if no rule is found/not enabled by config.
        dataEvaluation.addDataAllowedReason(DataAllowedReason.NORMAL);
        log("evaluateDataNetworkHandover: " + dataEvaluation);
        return dataEvaluation;
    }

+11 −4
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ import android.telephony.data.ApnSetting;
import android.telephony.data.DataCallResponse;
import android.telephony.data.DataCallResponse.LinkStatus;
import android.telephony.data.DataProfile;
import android.telephony.data.DataService;
import android.telephony.data.DataServiceCallback;
import android.telephony.data.ThrottleStatus;
import android.telephony.ims.ImsManager;
@@ -482,6 +483,9 @@ public class DataNetworkControllerTest extends TelephonyTest {

        mContextFixture.putIntResource(com.android.internal.R.integer
                        .config_delay_for_ims_dereg_millis, 3000);

        mContextFixture.putBooleanResource(com.android.internal.R.bool
                .config_enable_iwlan_handover_policy, true);
    }

    @Before
@@ -1515,13 +1519,16 @@ public class DataNetworkControllerTest extends TelephonyTest {
                .getPreferredTransportByNetworkCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
        mDataNetworkControllerUT.obtainMessage(21/*EVENT_PREFERRED_TRANSPORT_CHANGED*/,
                NetworkCapabilities.NET_CAPABILITY_IMS, 0).sendToTarget();
        // After this, IMS data network should be disconnected, and DNC should attempt to
        // establish a new one on IWLAN
        Mockito.clearInvocations(mMockedWwanDataServiceManager);
        processAllMessages();
        DataNetwork dataNetwork = getDataNetworks().get(0);
        // Verify that IWWAN handover succeeded.
        assertThat(dataNetwork.getTransport()).isEqualTo(
        assertThat(getDataNetworks().get(0).getTransport()).isEqualTo(
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
        verify(mMockedWwanDataServiceManager, times(1)).setupDataCall(
                anyInt(), any(), anyBoolean(), anyBoolean(),
                eq(DataService.REQUEST_REASON_HANDOVER),
                any(), anyInt(), any(), any(), eq(true), any());

    }

    @Test