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

Commit e168e2a7 authored by Sooraj Sasindran's avatar Sooraj Sasindran Committed by Automerger Merge Worker
Browse files

Support api to control data by thermal service am: 7ccbe50a

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/1481076

Change-Id: Ib260fcd1818faeb96a8db00e9f526d66bb948783
parents 95378f8b 7ccbe50a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -3077,7 +3077,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