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

Commit 41c7c3b7 authored by Sarah Chin's avatar Sarah Chin
Browse files

DataSettingsManager notify when data override rules change

Data enabled can change for certain APNs depending on the data enabled
override rules while the overall data enabled may stay the same. Add a
callback for onDataEnabledOverrideChanged to handle this scenario and
have DNC reevaluate connections.

Test: atest DataNetworkControllerTest
Bug: 223629704
Change-Id: Id6591510f5af2bfd1835435fd5de59a350b828e2
parent 73e13e5a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -195,6 +195,8 @@ public class DataEvaluation {
        DATA_SERVICE_STATE_CHANGED,
        /** When data is enabled or disabled (by user, carrier, thermal, etc...) */
        DATA_ENABLED_CHANGED,
        /** When data enabled overrides are changed (MMS always allowed, data on non-DDS sub). */
        DATA_ENABLED_OVERRIDE_CHANGED,
        /** When data roaming is enabled or disabled. */
        ROAMING_ENABLED_CHANGED,
        /** When voice call ended (for concurrent voice/data not supported RAT). */
+14 −0
Original line number Diff line number Diff line
@@ -780,6 +780,20 @@ public class DataNetworkController extends Handler {
                                        DataEvaluationReason.DATA_ENABLED_CHANGED));
                            }
                            @Override
                            public void onDataEnabledOverrideChanged(boolean enabled,
                                    @TelephonyManager.MobileDataPolicy int policy) {
                                // If data enabled override is enabled by the user, evaluate the
                                // unsatisfied network requests and then attempt to setup data
                                // networks to satisfy them. If data enabled override is disabled,
                                // evaluate the existing data networks and see if they need to be
                                // torn down.
                                logl("onDataEnabledOverrideChanged: enabled=" + enabled);
                                sendMessage(obtainMessage(enabled
                                                ? EVENT_REEVALUATE_UNSATISFIED_NETWORK_REQUESTS
                                                : EVENT_REEVALUATE_EXISTING_DATA_NETWORKS,
                                        DataEvaluationReason.DATA_ENABLED_OVERRIDE_CHANGED));
                            }
                            @Override
                            public void onDataRoamingEnabledChanged(boolean enabled) {
                                // If data roaming is enabled by the user, evaluate the unsatisfied
                                // network requests and then attempt to setup data networks to
+22 −4
Original line number Diff line number Diff line
@@ -131,6 +131,16 @@ public class DataSettingsManager extends Handler {
        public void onDataEnabledChanged(boolean enabled,
                @TelephonyManager.DataEnabledChangedReason int reason) {}

        /**
         * Called when data enabled override changed.
         *
         * @param enabled {@code true} indicates data enabled override is enabled.
         * @param policy {@link TelephonyManager.MobileDataPolicy} indicating the policy that was
         *               enabled or disabled.
         */
        public void onDataEnabledOverrideChanged(boolean enabled,
                @TelephonyManager.MobileDataPolicy int policy) {}

        /**
         * Called when data roaming enabled state changed.
         *
@@ -234,6 +244,8 @@ public class DataSettingsManager extends Handler {
                if (SubscriptionController.getInstance()
                        .setDataEnabledOverrideRules(mSubId, mDataEnabledOverride.getRules())) {
                    updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_OVERRIDE);
                    notifyDataEnabledOverrideChanged(alwaysAllow,
                            TelephonyManager.MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED);
                }
                break;
            }
@@ -247,13 +259,12 @@ public class DataSettingsManager extends Handler {
                if (SubscriptionController.getInstance()
                        .setDataEnabledOverrideRules(mSubId, mDataEnabledOverride.getRules())) {
                    updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_OVERRIDE);
                    notifyDataEnabledOverrideChanged(allow, TelephonyManager
                            .MOBILE_DATA_POLICY_DATA_ON_NON_DEFAULT_DURING_VOICE_CALL);
                }
                break;
            }
            case EVENT_PROVISIONED_CHANGED: {
                updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_UNKNOWN);
                break;
            }
            case EVENT_PROVISIONED_CHANGED:
            case EVENT_PROVISIONING_DATA_ENABLED_CHANGED: {
                updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_UNKNOWN);
                break;
@@ -553,6 +564,13 @@ public class DataSettingsManager extends Handler {
        mPhone.notifyDataEnabled(enabled, reason);
    }

    private void notifyDataEnabledOverrideChanged(boolean enabled,
            @TelephonyManager.MobileDataPolicy int policy) {
        logl("notifyDataEnabledOverrideChanged: enabled=" + enabled);
        mDataSettingsManagerCallbacks.forEach(callback -> callback.invokeFromExecutor(
                () -> callback.onDataEnabledOverrideChanged(enabled, policy)));
    }

    /**
     * Register the callback for receiving information from {@link DataSettingsManager}.
     *
+9 −0
Original line number Diff line number Diff line
@@ -524,6 +524,8 @@ public class DataNetworkControllerTest extends TelephonyTest {
        doReturn(true).when(mSST).isConcurrentVoiceAndDataAllowed();
        doReturn(PhoneConstants.State.IDLE).when(mCT).getState();
        doReturn("").when(mSubscriptionController).getDataEnabledOverrideRules(anyInt());
        doReturn(true).when(mSubscriptionController).setDataEnabledOverrideRules(
                anyInt(), anyString());

        for (int transport : new int[]{AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
                AccessNetworkConstants.TRANSPORT_TYPE_WLAN}) {
@@ -1096,6 +1098,13 @@ public class DataNetworkControllerTest extends TelephonyTest {
        verifyConnectedNetworkHasDataProfile(mGeneralPurposeDataProfile);
        verifyNoConnectedNetworkHasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
        verifyNoConnectedNetworkHasCapability(NetworkCapabilities.NET_CAPABILITY_SUPL);

        // Remove MMS data enabled override
        mDataNetworkControllerUT.getDataSettingsManager().setAlwaysAllowMmsData(false);
        processAllMessages();

        // Make sure MMS is torn down when the override is disabled.
        verifyNoConnectedNetworkHasCapability(NetworkCapabilities.NET_CAPABILITY_MMS);
    }

    @Test