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

Commit 7ccbe50a authored by Sooraj Sasindran's avatar Sooraj Sasindran
Browse files

Support api to control data by thermal service

Support api to control data by thermal service
Restructure data enablement API to have single API
with reason as an input to stop adding new apis
for new usecases.

Bug: 151342791
Test: cts
Change-Id: Ic5634e6f790bee8586ace1653fecd4ce4e738a82
Merged-In: Ic5634e6f790bee8586ace1653fecd4ce4e738a82
parent 549368ca
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -3076,7 +3076,8 @@ public class GsmCdmaPhone extends Phone {
            case EVENT_SET_CARRIER_DATA_ENABLED:
                ar = (AsyncResult) msg.obj;
                boolean enabled = (boolean) ar.result;
                mDataEnabledSettings.setCarrierDataEnabled(enabled);
                mDataEnabledSettings.setDataEnabled(TelephonyManager.DATA_ENABLED_REASON_CARRIER,
                        enabled);
                break;
            case EVENT_DEVICE_PROVISIONED_CHANGE:
                mDataEnabledSettings.updateProvisionedChanged();
+2 −1
Original line number Diff line number Diff line
@@ -706,7 +706,8 @@ public class MultiSimSettingController extends Handler {
                    && phone.isUserDataEnabled()
                    && !areSubscriptionsInSameGroup(defaultDataSub, phone.getSubId())) {
                log("setting data to false on " + phone.getSubId());
                phone.getDataEnabledSettings().setUserDataEnabled(false);
                phone.getDataEnabledSettings().setDataEnabled(
                        TelephonyManager.DATA_ENABLED_REASON_USER, false);
            }
        }
    }
+78 −6
Original line number Diff line number Diff line
@@ -69,7 +69,8 @@ public class DataEnabledSettings {
                    REASON_PROVISIONED_CHANGED,
                    REASON_PROVISIONING_DATA_ENABLED_CHANGED,
                    REASON_OVERRIDE_RULE_CHANGED,
                    REASON_OVERRIDE_CONDITION_CHANGED
                    REASON_OVERRIDE_CONDITION_CHANGED,
                    REASON_THERMAL_DATA_ENABLED
            })
    public @interface DataEnabledChangedReason {}

@@ -91,6 +92,8 @@ public class DataEnabledSettings {

    public static final int REASON_OVERRIDE_CONDITION_CHANGED = 8;

    public static final int REASON_THERMAL_DATA_ENABLED = 9;

    /**
     * responds to the setInternalDataEnabled call - used internally to turn off data.
     * For example during emergency calls
@@ -108,6 +111,15 @@ public class DataEnabledSettings {
     */
    private boolean mCarrierDataEnabled = true;

    /**
     * Flag indicating data allowed by Thermal service or not.
     */
    private boolean mThermalDataEnabled = true;

    /**
     * Flag indicating whether data is allowed or not for the device. It can be disabled by
     * user, carrier, policy or thermal
     */
    private boolean mIsDataEnabled = false;

    private final Phone mPhone;
@@ -172,6 +184,7 @@ public class DataEnabledSettings {
                + ", mPolicyDataEnabled=" + mPolicyDataEnabled
                + ", mCarrierDataEnabled=" + mCarrierDataEnabled
                + ", mIsDataEnabled=" + mIsDataEnabled
                + ", mThermalDataEnabled=" + mThermalDataEnabled
                + ", " + mDataEnabledOverride
                + "]";
    }
@@ -204,7 +217,7 @@ public class DataEnabledSettings {
        return mInternalDataEnabled;
    }

    public synchronized void setUserDataEnabled(boolean enabled) {
    private synchronized void setUserDataEnabled(boolean enabled) {
        // By default the change should propagate to the group.
        setUserDataEnabled(enabled, true);
    }
@@ -233,6 +246,32 @@ public class DataEnabledSettings {
        }
    }

    /**
     * Policy control of data connection with reason
     * @param reason the reason the data enable change is taking place
     * @param enabled True if enabling the data, otherwise disabling.
     */
    public synchronized void setDataEnabled(@TelephonyManager.DataEnabledReason int reason,
            boolean enabled) {
        switch (reason) {
            case TelephonyManager.DATA_ENABLED_REASON_USER:
                setUserDataEnabled(enabled);
                break;
            case TelephonyManager.DATA_ENABLED_REASON_CARRIER:
                setCarrierDataEnabled(enabled);
                break;
            case TelephonyManager.DATA_ENABLED_REASON_POLICY:
                setPolicyDataEnabled(enabled);
                break;
            case TelephonyManager.DATA_ENABLED_REASON_THERMAL:
                setThermalDataEnabled(enabled);
                break;
            default:
                log("Invalid data enable reason " + reason);
                break;
        }
    }

    public synchronized boolean isUserDataEnabled() {
        // User data should always be true for opportunistic subscription.
        if (isStandAloneOpportunistic(mPhone.getSubId(), mPhone.getContext())) return true;
@@ -304,7 +343,7 @@ public class DataEnabledSettings {
        return mDataEnabledOverride.isMmsAlwaysAllowed();
    }

    public synchronized void setPolicyDataEnabled(boolean enabled) {
    private synchronized void setPolicyDataEnabled(boolean enabled) {
        if (mPolicyDataEnabled != enabled) {
            localLog("PolicyDataEnabled", enabled);
            mPolicyDataEnabled = enabled;
@@ -316,7 +355,7 @@ public class DataEnabledSettings {
        return mPolicyDataEnabled;
    }

    public synchronized void setCarrierDataEnabled(boolean enabled) {
    private synchronized void setCarrierDataEnabled(boolean enabled) {
        if (mCarrierDataEnabled != enabled) {
            localLog("CarrierDataEnabled", enabled);
            mCarrierDataEnabled = enabled;
@@ -328,6 +367,18 @@ public class DataEnabledSettings {
        return mCarrierDataEnabled;
    }

    private synchronized void setThermalDataEnabled(boolean enabled) {
        if (mThermalDataEnabled != enabled) {
            localLog("ThermalDataEnabled", enabled);
            mThermalDataEnabled = enabled;
            updateDataEnabledAndNotify(REASON_THERMAL_DATA_ENABLED);
        }
    }

    public synchronized boolean isThermalDataEnabled() {
        return mThermalDataEnabled;
    }

    public synchronized void updateProvisionedChanged() {
        updateDataEnabledAndNotify(REASON_PROVISIONED_CHANGED);
    }
@@ -340,6 +391,27 @@ public class DataEnabledSettings {
        return mIsDataEnabled;
    }

    /**
     * Check if data is enabled for a specific reason {@@TelephonyManager.DataEnabledReason}
     *
     * @return {@code true} if the overall data is enabled; {@code false} if not.
     */
    public synchronized boolean isDataEnabledWithReason(
            @TelephonyManager.DataEnabledReason int reason) {
        switch (reason) {
            case TelephonyManager.DATA_ENABLED_REASON_USER:
                return isUserDataEnabled();
            case TelephonyManager.DATA_ENABLED_REASON_CARRIER:
                return isCarrierDataEnabled();
            case TelephonyManager.DATA_ENABLED_REASON_POLICY:
                return isPolicyDataEnabled();
            case TelephonyManager.DATA_ENABLED_REASON_THERMAL:
                return isThermalDataEnabled();
            default:
                return false;
        }
    }

    private synchronized void updateDataEnabledAndNotify(int reason) {
        boolean prevDataEnabled = mIsDataEnabled;

@@ -356,7 +428,7 @@ public class DataEnabledSettings {
        } else {
            mIsDataEnabled = mInternalDataEnabled && (isUserDataEnabled() || mDataEnabledOverride
                    .shouldOverrideDataEnabledSettings(mPhone, ApnSetting.TYPE_ALL))
                    && mPolicyDataEnabled && mCarrierDataEnabled;
                    && mPolicyDataEnabled && mCarrierDataEnabled && mThermalDataEnabled;
        }
    }

@@ -473,7 +545,7 @@ public class DataEnabledSettings {
                    .shouldOverrideDataEnabledSettings(mPhone, apnType);

            return (mInternalDataEnabled && mPolicyDataEnabled && mCarrierDataEnabled
                    && (userDataEnabled || isDataEnabledOverridden));
                    && mThermalDataEnabled && (userDataEnabled || isDataEnabledOverridden));
        }
    }

+5 −4
Original line number Diff line number Diff line
@@ -18,17 +18,17 @@ package com.android.internal.telephony.vendor;

import android.content.Context;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.util.Log;

import com.android.internal.telephony.GlobalSettingsHelper;
import com.android.internal.telephony.MultiSimSettingController;
import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.SubscriptionController;

import java.util.List;
import java.util.stream.Collectors;

/*
 * Extending VendorMultiSimSettingController to override default
@@ -90,7 +90,8 @@ public class VendorMultiSimSettingController extends MultiSimSettingController {
                // For active subscription, call setUserDataEnabled through DataEnabledSettings.
                Phone phone = PhoneFactory.getPhone(mSubController.getPhoneId(currentSubId));
                if (phone != null) {
                    phone.getDataEnabledSettings().setUserDataEnabled(enable);
                    phone.getDataEnabledSettings().setDataEnabled(
                            TelephonyManager.DATA_ENABLED_REASON_USER, enable);
                }
            } else {
                // For inactive subscription, directly write into global settings.
+22 −11
Original line number Diff line number Diff line
@@ -313,7 +313,8 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        mMultiSimSettingControllerUT.notifyCarrierConfigChanged(0, 1);
        mMultiSimSettingControllerUT.notifyCarrierConfigChanged(1, 2);
        processAllMessages();
        verify(mDataEnabledSettingsMock2).setUserDataEnabled(false);
        verify(mDataEnabledSettingsMock2).setDataEnabled(
                TelephonyManager.DATA_ENABLED_REASON_USER, false);

        // Enable on non-default sub should trigger setDefaultDataSubId.
        mMultiSimSettingControllerUT.notifyUserDataEnabled(2, true);
@@ -324,7 +325,8 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        doReturn(2).when(mSubControllerMock).getDefaultDataSubId();
        mMultiSimSettingControllerUT.notifyDefaultDataSubChanged();
        processAllMessages();
        verify(mDataEnabledSettingsMock1).setUserDataEnabled(false);
        verify(mDataEnabledSettingsMock1).setDataEnabled(
                TelephonyManager.DATA_ENABLED_REASON_USER, false);

        doReturn(1).when(mSubControllerMock).getDefaultDataSubId();
        doReturn(1).when(mSubControllerMock).getDefaultSmsSubId();
@@ -391,7 +393,8 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        doReturn(1).when(mSubControllerMock).getDefaultDataSubId();
        mMultiSimSettingControllerUT.notifyDefaultDataSubChanged();
        processAllMessages();
        verify(mDataEnabledSettingsMock2).setUserDataEnabled(false);
        verify(mDataEnabledSettingsMock2).setDataEnabled(
                TelephonyManager.DATA_ENABLED_REASON_USER, false);
        mMultiSimSettingControllerUT.notifyUserDataEnabled(2, false);
        processAllMessages();
        assertFalse(GlobalSettingsHelper.getBoolean(
@@ -439,7 +442,8 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        mMultiSimSettingControllerUT.notifyCarrierConfigChanged(1, 2);
        processAllMessages();
        verify(mSubControllerMock).setDefaultDataSubId(2);
        verify(mDataEnabledSettingsMock1, never()).setUserDataEnabled(anyBoolean());
        verify(mDataEnabledSettingsMock1, never()).setDataEnabled(
                anyInt(), anyBoolean());
        // No user selection needed, no intent should be sent.
        verify(mContext, never()).sendBroadcast(any());

@@ -456,8 +460,10 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        mMultiSimSettingControllerUT.notifyUserDataEnabled(2, true);
        processAllMessages();
        verify(mSubControllerMock, never()).setDefaultDataSubId(anyInt());
        verify(mDataEnabledSettingsMock1, never()).setUserDataEnabled(anyBoolean());
        verify(mDataEnabledSettingsMock2, never()).setUserDataEnabled(anyBoolean());
        verify(mDataEnabledSettingsMock1, never()).setDataEnabled(
                eq(TelephonyManager.DATA_ENABLED_REASON_USER), anyBoolean());
        verify(mDataEnabledSettingsMock2, never()).setDataEnabled(
                TelephonyManager.DATA_ENABLED_REASON_USER, false);
    }

    @Test
@@ -551,13 +557,16 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        // loaded on both subscriptions.
        mMultiSimSettingControllerUT.notifyAllSubscriptionLoaded();
        processAllMessages();
        verify(mDataEnabledSettingsMock2, never()).setUserDataEnabled(false);
        verify(mDataEnabledSettingsMock2, never()).setDataEnabled(
                TelephonyManager.DATA_ENABLED_REASON_USER, false);
        mMultiSimSettingControllerUT.notifyCarrierConfigChanged(0, 1);
        processAllMessages();
        verify(mDataEnabledSettingsMock2, never()).setUserDataEnabled(false);
        verify(mDataEnabledSettingsMock2, never()).setDataEnabled(
                TelephonyManager.DATA_ENABLED_REASON_USER, false);
        mMultiSimSettingControllerUT.notifyCarrierConfigChanged(1, 2);
        processAllMessages();
        verify(mDataEnabledSettingsMock2).setUserDataEnabled(false);
        verify(mDataEnabledSettingsMock2).setDataEnabled(
                TelephonyManager.DATA_ENABLED_REASON_USER, false);

        // Switch from sub 2 to sub 3 in phone[1].
        clearInvocations(mSubControllerMock);
@@ -639,7 +648,8 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        processAllMessages();
        // Nothing should happen as carrier config is not ready for sub 2.
        verify(mDataEnabledSettingsMock2, never()).setUserDataEnabled(false);
        verify(mDataEnabledSettingsMock2, never()).setDataEnabled(
                TelephonyManager.DATA_ENABLED_REASON_USER, false);

        // Still notify carrier config without specifying subId2, but this time subController
        // and CarrierConfigManager have subId 2 active and ready.
@@ -651,6 +661,7 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        processAllMessages();
        // This time user data should be disabled on phone1.
        verify(mDataEnabledSettingsMock2).setUserDataEnabled(false);
        verify(mDataEnabledSettingsMock2).setDataEnabled(
                TelephonyManager.DATA_ENABLED_REASON_USER, false);
    }
}
Loading