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

Commit 552d3397 authored by Malcolm Chen's avatar Malcolm Chen Committed by Xiangyu/Malcolm Chen
Browse files

"Data during calls" toggle not working.

1) Have DataEnabledSettings listen to Call state change,
so that mIsDataEnabled is updated in time.

2) In DataEnabledOverride, when evaluating CONDITION_IN_VOICE_CALL,
also check if IMS call is active.

Bug: 134981077
Test: manual and unittest
Change-Id: Ia97b6c5b9bb3a0a1a546dde7dee1192feefe00b6
Merged-In: Ia97b6c5b9bb3a0a1a546dde7dee1192feefe00b6
parent 4b9c93ba
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -349,7 +349,7 @@ public class DataEnabledOverride {

        if (phone != null) {
            // Check if the device is on voice call
            if (phone.getCallTracker().getState() != PhoneConstants.State.IDLE) {
            if (phone.getState() != PhoneConstants.State.IDLE) {
                conditions |= OverrideConditions.CONDITION_IN_VOICE_CALL;
            }

+34 −3
Original line number Diff line number Diff line
@@ -17,6 +17,9 @@
package com.android.internal.telephony.dataconnection;


import static android.telephony.PhoneStateListener.LISTEN_CALL_STATE;
import static android.telephony.PhoneStateListener.LISTEN_NONE;

import android.annotation.IntDef;
import android.content.ContentResolver;
import android.content.Context;
@@ -25,9 +28,11 @@ import android.os.RegistrantList;
import android.os.SystemProperties;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.PhoneStateListener;
import android.telephony.Rlog;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
import android.util.LocalLog;
import android.util.Pair;
@@ -60,7 +65,9 @@ public class DataEnabledSettings {
                    REASON_POLICY_DATA_ENABLED,
                    REASON_DATA_ENABLED_BY_CARRIER,
                    REASON_PROVISIONED_CHANGED,
                    REASON_PROVISIONING_DATA_ENABLED_CHANGED
                    REASON_PROVISIONING_DATA_ENABLED_CHANGED,
                    REASON_OVERRIDE_RULE_CHANGED,
                    REASON_OVERRIDE_CONDITION_CHANGED
            })
    public @interface DataEnabledChangedReason {}

@@ -78,6 +85,10 @@ public class DataEnabledSettings {

    public static final int REASON_PROVISIONING_DATA_ENABLED_CHANGED = 6;

    public static final int REASON_OVERRIDE_RULE_CHANGED = 7;

    public static final int REASON_OVERRIDE_CONDITION_CHANGED = 8;

    /**
     * responds to the setInternalDataEnabled call - used internally to turn off data.
     * For example during emergency calls
@@ -114,6 +125,8 @@ public class DataEnabledSettings {

    private DataEnabledOverride mDataEnabledOverride;

    private TelephonyManager mTelephonyManager;

    // for msim, user data enabled setting depends on subId.
    private final SubscriptionManager.OnSubscriptionsChangedListener
            mOnSubscriptionsChangeListener =
@@ -126,6 +139,7 @@ public class DataEnabledSettings {
                                    + mPhone.getSubId());
                            mSubId = mPhone.getSubId();
                            mDataEnabledOverride = getDataEnabledOverride();
                            updatePhoneStateListener();
                            updateDataEnabledAndNotify(REASON_USER_DATA_ENABLED);
                            mPhone.notifyUserMobileDataStateChanged(isUserDataEnabled());
                        }
@@ -133,6 +147,21 @@ public class DataEnabledSettings {
                }
            };

    private void updatePhoneStateListener() {
        mTelephonyManager.listen(mPhoneStateListener, LISTEN_NONE);
        if (SubscriptionManager.isUsableSubscriptionId(mSubId)) {
            mTelephonyManager = mTelephonyManager.createForSubscriptionId(mSubId);
        }
        mTelephonyManager.listen(mPhoneStateListener, LISTEN_CALL_STATE);
    }

    private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
        @Override
        public void onCallStateChanged(@TelephonyManager.CallState int state, String phoneNumber) {
            updateDataEnabledAndNotify(REASON_OVERRIDE_CONDITION_CHANGED);
        }
    };

    @Override
    public String toString() {
        return "[mInternalDataEnabled=" + mInternalDataEnabled
@@ -151,6 +180,8 @@ public class DataEnabledSettings {
        SubscriptionManager subscriptionManager = (SubscriptionManager) mPhone.getContext()
                .getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
        subscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
        mTelephonyManager = (TelephonyManager) mPhone.getContext()
                .getSystemService(Context.TELEPHONY_SERVICE);
        mDataEnabledOverride = getDataEnabledOverride();
        updateDataEnabled();
    }
@@ -210,7 +241,7 @@ public class DataEnabledSettings {
        boolean changed = SubscriptionController.getInstance()
                .setDataEnabledOverrideRules(mPhone.getSubId(), mDataEnabledOverride.getRules());
        if (changed) {
            updateDataEnabled();
            updateDataEnabledAndNotify(REASON_OVERRIDE_RULE_CHANGED);
            notifyDataEnabledOverrideChanged();
        }

@@ -231,7 +262,7 @@ public class DataEnabledSettings {
        boolean changed = SubscriptionController.getInstance()
                .setDataEnabledOverrideRules(mPhone.getSubId(), mDataEnabledOverride.getRules());
        if (changed) {
            updateDataEnabled();
            updateDataEnabledAndNotify(REASON_OVERRIDE_RULE_CHANGED);
            notifyDataEnabledOverrideChanged();
        }

+7 −6
Original line number Diff line number Diff line
@@ -68,12 +68,12 @@ public class DataEnabledOverrideTest extends TelephonyTest {
        assertTrue(dataEnabledOverride.shouldOverrideDataEnabledSettings(
                mPhone, ApnSetting.TYPE_MMS));

        doReturn(PhoneConstants.State.IDLE).when(mCT).getState();
        doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();

        assertFalse(dataEnabledOverride.shouldOverrideDataEnabledSettings(
                mPhone, ApnSetting.TYPE_DEFAULT));

        doReturn(PhoneConstants.State.OFFHOOK).when(mCT).getState();
        doReturn(PhoneConstants.State.OFFHOOK).when(mPhone).getState();

        assertTrue(dataEnabledOverride.shouldOverrideDataEnabledSettings(
                mPhone, ApnSetting.TYPE_DEFAULT));
@@ -98,12 +98,12 @@ public class DataEnabledOverrideTest extends TelephonyTest {
        assertTrue(dataEnabledOverride.shouldOverrideDataEnabledSettings(
                mPhone, ApnSetting.TYPE_MMS));

        doReturn(PhoneConstants.State.IDLE).when(mCT).getState();
        doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();

        assertFalse(dataEnabledOverride.shouldOverrideDataEnabledSettings(
                mPhone, ApnSetting.TYPE_DEFAULT));

        doReturn(PhoneConstants.State.OFFHOOK).when(mCT).getState();
        doReturn(PhoneConstants.State.OFFHOOK).when(mPhone).getState();

        assertTrue(dataEnabledOverride.shouldOverrideDataEnabledSettings(
                mPhone, ApnSetting.TYPE_DEFAULT));
@@ -138,7 +138,7 @@ public class DataEnabledOverrideTest extends TelephonyTest {
    @SmallTest
    public void testAllApnTypesInRule() throws Exception {
        DataEnabledOverride dataEnabledOverride = new DataEnabledOverride("*=inVoiceCall");
        doReturn(PhoneConstants.State.OFFHOOK).when(mCT).getState();
        doReturn(PhoneConstants.State.OFFHOOK).when(mPhone).getState();

        assertTrue(dataEnabledOverride.shouldOverrideDataEnabledSettings(
                mPhone, ApnSetting.TYPE_FOTA));
@@ -208,7 +208,8 @@ public class DataEnabledOverrideTest extends TelephonyTest {
        assertTrue(deo.isDataAllowedInVoiceCall());
        doReturn(1).when(mPhone).getSubId();
        doReturn(2).when(mSubscriptionController).getDefaultSmsSubId();
        doReturn(PhoneConstants.State.OFFHOOK).when(mCT).getState();

        doReturn(PhoneConstants.State.OFFHOOK).when(mPhone).getState();
        assertTrue(deo.getRules(), deo.shouldOverrideDataEnabledSettings(mPhone,
                ApnSetting.TYPE_DEFAULT));
        deo.setDataAllowedInVoiceCall(false);