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

Commit baa26681 authored by Ling Ma's avatar Ling Ma Committed by Jack Yu
Browse files

Add config_enable_iwlan_handover_policy flag to allow ignoring handover...

Add config_enable_iwlan_handover_policy flag to allow ignoring handover policies defined by carriers

a device level config that OEMs can set to ignore KEY_IWLAN_HANDOVER_POLICY_STRING_ARRAY

Test: atest
Bug: 223447692
Merged-In: If59c09114d5757fc72de15cc27d7c3be88d1c566
Change-Id: If59c09114d5757fc72de15cc27d7c3be88d1c566
parent 990a8457
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -713,6 +713,15 @@ public class DataConfigManager extends Handler {
                .config_wlan_data_service_conn_persistence_on_restart);
                .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
     * @return {@code true} if tearing down IMS data network should be delayed until the voice call
     * ends.
     * ends.
@@ -969,6 +978,7 @@ public class DataConfigManager extends Handler {
        pw.increaseIndent();
        pw.increaseIndent();
        mDataSetupRetryRules.forEach(pw::println);
        mDataSetupRetryRules.forEach(pw::println);
        pw.decreaseIndent();
        pw.decreaseIndent();
        pw.println("isIwlanHandoverPolicyEnabled=" + isIwlanHandoverPolicyEnabled());
        pw.println("Data handover retry rules:");
        pw.println("Data handover retry rules:");
        pw.increaseIndent();
        pw.increaseIndent();
        mDataHandoverRetryRules.forEach(pw::println);
        mDataHandoverRetryRules.forEach(pw::println);
+41 −35
Original line number Original line Diff line number Diff line
@@ -1702,6 +1702,7 @@ public class DataNetworkController extends Handler {
            return dataEvaluation;
            return dataEvaluation;
        }
        }


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


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


                if (rule.sourceAccessNetworks.contains(sourceAccessNetwork)
                if (rule.sourceAccessNetworks.contains(sourceAccessNetwork)
                        && rule.targetAccessNetworks.contains(targetAccessNetwork)) {
                        && 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.
                    // otherwise, any capabilities overlap is also considered matched.
                    if (rule.networkCapabilities.isEmpty()
                    if (rule.networkCapabilities.isEmpty()
                            || rule.networkCapabilities.stream()
                            || rule.networkCapabilities.stream()
@@ -1739,10 +1741,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 by default if no rule is found/not enabled by config.
        // Allow handover anyway if no rule is found.
        dataEvaluation.addDataAllowedReason(DataAllowedReason.NORMAL);
        dataEvaluation.addDataAllowedReason(DataAllowedReason.NORMAL);
        log("evaluateDataNetworkHandover: " + dataEvaluation);
        return dataEvaluation;
        return dataEvaluation;
    }
    }


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


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

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


    @Before
    @Before
@@ -1530,13 +1534,16 @@ public class DataNetworkControllerTest extends TelephonyTest {
                .getPreferredTransportByNetworkCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
                .getPreferredTransportByNetworkCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
        mDataNetworkControllerUT.obtainMessage(21/*EVENT_PREFERRED_TRANSPORT_CHANGED*/,
        mDataNetworkControllerUT.obtainMessage(21/*EVENT_PREFERRED_TRANSPORT_CHANGED*/,
                NetworkCapabilities.NET_CAPABILITY_IMS, 0).sendToTarget();
                NetworkCapabilities.NET_CAPABILITY_IMS, 0).sendToTarget();
        // After this, IMS data network should be disconnected, and DNC should attempt to
        Mockito.clearInvocations(mMockedWwanDataServiceManager);
        // establish a new one on IWLAN
        processAllMessages();
        processAllMessages();
        DataNetwork dataNetwork = getDataNetworks().get(0);
        // Verify that IWWAN handover succeeded.
        // Verify that IWWAN handover succeeded.
        assertThat(dataNetwork.getTransport()).isEqualTo(
        assertThat(getDataNetworks().get(0).getTransport()).isEqualTo(
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
                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
    @Test