Loading proto/src/persist_atoms.proto +1 −0 Original line number Diff line number Diff line Loading @@ -222,6 +222,7 @@ message VoiceCallSession { optional int32 rat_at_connected = 30; optional bool is_multiparty = 31; optional int32 call_duration = 32; optional int32 last_known_rat = 33; // Internal use only optional int64 setup_begin_millis = 10001; } Loading src/java/com/android/internal/telephony/GsmCdmaPhone.java +8 −2 Original line number Diff line number Diff line Loading @@ -4631,6 +4631,8 @@ public class GsmCdmaPhone extends Phone { boolean mIsVonrEnabledByCarrier = config.getBoolean(CarrierConfigManager.KEY_VONR_ENABLED_BOOL); boolean mDefaultVonr = config.getBoolean(CarrierConfigManager.KEY_VONR_ON_BY_DEFAULT_BOOL); String result = SubscriptionController.getInstance().getSubscriptionProperty( getSubId(), Loading @@ -4644,11 +4646,15 @@ public class GsmCdmaPhone extends Phone { logd("VoNR setting from telephony.db:" + setting + " ,vonr_enabled_bool:" + mIsVonrEnabledByCarrier); + mIsVonrEnabledByCarrier + " ,vonr_on_by_default_bool:" + mDefaultVonr); if (!mIsVonrEnabledByCarrier) { mCi.setVoNrEnabled(false, obtainMessage(EVENT_SET_VONR_ENABLED_DONE), null); } else if (setting == 1 || setting == -1) { } else if (setting == -1) { mCi.setVoNrEnabled(mDefaultVonr, obtainMessage(EVENT_SET_VONR_ENABLED_DONE), null); } else if (setting == 1) { mCi.setVoNrEnabled(true, obtainMessage(EVENT_SET_VONR_ENABLED_DONE), null); } else if (setting == 0) { mCi.setVoNrEnabled(false, obtainMessage(EVENT_SET_VONR_ENABLED_DONE), null); Loading src/java/com/android/internal/telephony/NetworkTypeController.java +36 −12 Original line number Diff line number Diff line Loading @@ -152,6 +152,7 @@ public class NetworkTypeController extends StateMachine { private boolean mIsTimerResetEnabledForLegacyStateRRCIdle; private int mLtePlusThresholdBandwidth; private int mNrAdvancedThresholdBandwidth; private boolean mIncludeLteForNrAdvancedThresholdBandwidth; private int[] mAdditionalNrAdvancedBandsList; private String mPrimaryTimerState; private String mSecondaryTimerState; Loading Loading @@ -259,6 +260,9 @@ public class NetworkTypeController extends StateMachine { CarrierConfigManager.KEY_LTE_PLUS_THRESHOLD_BANDWIDTH_KHZ_INT); mNrAdvancedThresholdBandwidth = CarrierConfigManager.getDefaultConfig().getInt( CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT); mIncludeLteForNrAdvancedThresholdBandwidth = CarrierConfigManager.getDefaultConfig() .getBoolean(CarrierConfigManager .KEY_INCLUDE_LTE_FOR_NR_ADVANCED_THRESHOLD_BANDWIDTH_BOOL); mEnableNrAdvancedWhileRoaming = CarrierConfigManager.getDefaultConfig().getBoolean( CarrierConfigManager.KEY_ENABLE_NR_ADVANCED_WHILE_ROAMING_BOOL); Loading Loading @@ -294,6 +298,9 @@ public class NetworkTypeController extends StateMachine { mNrAdvancedThresholdBandwidth = b.getInt( CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT, mNrAdvancedThresholdBandwidth); mIncludeLteForNrAdvancedThresholdBandwidth = b.getBoolean(CarrierConfigManager .KEY_INCLUDE_LTE_FOR_NR_ADVANCED_THRESHOLD_BANDWIDTH_BOOL, mIncludeLteForNrAdvancedThresholdBandwidth); mAdditionalNrAdvancedBandsList = b.getIntArray( CarrierConfigManager.KEY_ADDITIONAL_NR_ADVANCED_BANDS_INT_ARRAY); mNrAdvancedCapablePcoId = b.getInt( Loading Loading @@ -977,19 +984,21 @@ public class NetworkTypeController extends StateMachine { } private void updateNrAdvancedState() { log("updateNrAdvancedState"); if (!isNrConnected()) { if (!isNrConnected() && getDataNetworkType() != TelephonyManager.NETWORK_TYPE_NR) { log("NR state changed. Sending EVENT_NR_STATE_CHANGED"); sendMessage(EVENT_NR_STATE_CHANGED); return; } if (!isNrAdvanced()) { boolean isNrAdvanced = isNrAdvanced(); if (isNrAdvanced != mIsNrAdvanced) { if (!isNrAdvanced) { if (DBG) log("updateNrAdvancedState: CONNECTED_NR_ADVANCED -> CONNECTED"); transitionWithTimerTo(mNrConnectedState); transitionWithTimerTo(mNrConnectedState, STATE_CONNECTED); } else { if (DBG) log("updateNrAdvancedState: CONNECTED -> CONNECTED_NR_ADVANCED"); transitionTo(mNrConnectedState); } } mIsNrAdvanced = isNrAdvanced(); log("mIsNrAdvanced=" + mIsNrAdvanced); } Loading @@ -998,7 +1007,10 @@ public class NetworkTypeController extends StateMachine { private final NrConnectedState mNrConnectedState = new NrConnectedState(); private void transitionWithTimerTo(IState destState) { String destName = destState.getName(); transitionWithTimerTo(destState, destState.getName()); } private void transitionWithTimerTo(IState destState, String destName) { if (DBG) log("Transition with primary timer from " + mPreviousState + " to " + destName); OverrideTimerRule rule = mOverrideTimerRules.get(mPreviousState); if (!mIsDeviceIdleMode && rule != null && rule.getTimer(destName) > 0) { Loading Loading @@ -1075,6 +1087,8 @@ public class NetworkTypeController extends StateMachine { removeMessages(EVENT_PRIMARY_TIMER_EXPIRED); mIsPrimaryTimerActive = false; mPrimaryTimerState = ""; transitionToCurrentState(); return; } if (mIsSecondaryTimerActive && !mSecondaryTimerState.equals(currentState)) { Loading @@ -1086,6 +1100,8 @@ public class NetworkTypeController extends StateMachine { removeMessages(EVENT_SECONDARY_TIMER_EXPIRED); mIsSecondaryTimerActive = false; mSecondaryTimerState = ""; transitionToCurrentState(); return; } if (mIsPrimaryTimerActive || mIsSecondaryTimerActive) { Loading Loading @@ -1223,11 +1239,19 @@ public class NetworkTypeController extends StateMachine { return false; } int bandwidths = 0; if (mPhone.getServiceStateTracker().getPhysicalChannelConfigList() != null) { bandwidths = mPhone.getServiceStateTracker().getPhysicalChannelConfigList() .stream() .filter(config -> mIncludeLteForNrAdvancedThresholdBandwidth || config.getNetworkType() == TelephonyManager.NETWORK_TYPE_NR) .map(PhysicalChannelConfig::getCellBandwidthDownlinkKhz) .mapToInt(Integer::intValue) .sum(); } // Check if meeting minimum bandwidth requirement. For most carriers, there is no minimum // bandwidth requirement and mNrAdvancedThresholdBandwidth is 0. if (mNrAdvancedThresholdBandwidth > 0 && IntStream.of(mPhone.getServiceState().getCellBandwidths()).sum() < mNrAdvancedThresholdBandwidth) { if (mNrAdvancedThresholdBandwidth > 0 && bandwidths < mNrAdvancedThresholdBandwidth) { return false; } Loading src/java/com/android/internal/telephony/SubscriptionController.java +4 −10 Original line number Diff line number Diff line Loading @@ -2870,15 +2870,9 @@ public class SubscriptionController extends ISub.Stub { subId); TelecomManager telecomManager = mContext.getSystemService(TelecomManager.class); PhoneAccountHandle currentHandle = telecomManager.getUserSelectedOutgoingPhoneAccount(); logd("[setDefaultVoiceSubId] current phoneAccountHandle=" + currentHandle); if (!Objects.equals(currentHandle, newHandle)) { telecomManager.setUserSelectedOutgoingPhoneAccount(newHandle); logd("[setDefaultVoiceSubId] change to phoneAccountHandle=" + newHandle); } else { logd("[setDefaultVoiceSubId] default phoneAccountHandle not changed."); } logd("[setDefaultVoiceSubId] requesting change to phoneAccountHandle=" + newHandle); if (previousDefaultSub != getDefaultSubId()) { sendDefaultChangedBroadcast(getDefaultSubId()); Loading Loading @@ -3604,7 +3598,7 @@ public class SubscriptionController extends ISub.Stub { if (phoneSwitcher == null) { logd("Set preferred data sub: phoneSwitcher is null."); AnomalyReporter.reportAnomaly( UUID.fromString("a3ab0b9d-f2aa-4baf-911d-7096c0d4645a"), UUID.fromString("a73fe57f-4178-4bc3-a7ae-9d7354939274"), "Set preferred data sub: phoneSwitcher is null."); if (callback != null) { try { Loading @@ -3631,7 +3625,7 @@ public class SubscriptionController extends ISub.Stub { PhoneSwitcher phoneSwitcher = PhoneSwitcher.getInstance(); if (phoneSwitcher == null) { AnomalyReporter.reportAnomaly( UUID.fromString("a3ab0b9d-f2aa-4baf-911d-7096c0d4645a"), UUID.fromString("e72747ab-d0aa-4b0e-9dd5-cb99365c6d58"), "Get preferred data sub: phoneSwitcher is null."); return SubscriptionManager.DEFAULT_SUBSCRIPTION_ID; } Loading src/java/com/android/internal/telephony/data/DataConfigManager.java +19 −0 Original line number Diff line number Diff line Loading @@ -297,6 +297,8 @@ public class DataConfigManager extends Handler { new ConcurrentHashMap<>(); /** Rules for handover between IWLAN and cellular network. */ private @NonNull final List<HandoverRule> mHandoverRuleList = new ArrayList<>(); /** {@code True} keep IMS network in case of moving to non VOPS area; {@code false} otherwise.*/ private boolean mShouldKeepNetworkUpInNonVops = false; /** * Constructor Loading Loading @@ -452,6 +454,7 @@ public class DataConfigManager extends Handler { updateDataRetryRules(); updateMeteredApnTypes(); updateSingleDataNetworkTypeAndCapabilityExemption(); updateVopsConfig(); updateUnmeteredNetworkTypes(); updateBandwidths(); updateTcpBuffers(); Loading Loading @@ -662,6 +665,16 @@ public class DataConfigManager extends Handler { } } /** * Update the voice over PS related config from the carrier config. */ private void updateVopsConfig() { synchronized (this) { mShouldKeepNetworkUpInNonVops = mCarrierConfig.getBoolean(CarrierConfigManager .Ims.KEY_KEEP_PDN_UP_IN_NO_VOPS_BOOL); } } /** * @return The list of {@link NetworkType} that only supports single data networks */ Loading @@ -677,6 +690,11 @@ public class DataConfigManager extends Handler { return Collections.unmodifiableSet(mCapabilitiesExemptFromSingleDataList); } /** {@code True} keep IMS network in case of moving to non VOPS area; {@code false} otherwise.*/ public boolean shouldKeepNetworkUpInNonVops() { return mShouldKeepNetworkUpInNonVops; } /** * @return Whether {@link NetworkCapabilities#NET_CAPABILITY_TEMPORARILY_NOT_METERED} * is supported by the carrier. Loading Loading @@ -1289,6 +1307,7 @@ public class DataConfigManager extends Handler { pw.println("Capabilities exempt from single PDN=" + mCapabilitiesExemptFromSingleDataList .stream().map(DataUtils::networkCapabilityToString) .collect(Collectors.joining(","))); pw.println("mShouldKeepNetworkUpInNoVops=" + mShouldKeepNetworkUpInNonVops); pw.println("Unmetered network types=" + String.join(",", mUnmeteredNetworkTypes)); pw.println("Roaming unmetered network types=" + String.join(",", mRoamingUnmeteredNetworkTypes)); Loading Loading
proto/src/persist_atoms.proto +1 −0 Original line number Diff line number Diff line Loading @@ -222,6 +222,7 @@ message VoiceCallSession { optional int32 rat_at_connected = 30; optional bool is_multiparty = 31; optional int32 call_duration = 32; optional int32 last_known_rat = 33; // Internal use only optional int64 setup_begin_millis = 10001; } Loading
src/java/com/android/internal/telephony/GsmCdmaPhone.java +8 −2 Original line number Diff line number Diff line Loading @@ -4631,6 +4631,8 @@ public class GsmCdmaPhone extends Phone { boolean mIsVonrEnabledByCarrier = config.getBoolean(CarrierConfigManager.KEY_VONR_ENABLED_BOOL); boolean mDefaultVonr = config.getBoolean(CarrierConfigManager.KEY_VONR_ON_BY_DEFAULT_BOOL); String result = SubscriptionController.getInstance().getSubscriptionProperty( getSubId(), Loading @@ -4644,11 +4646,15 @@ public class GsmCdmaPhone extends Phone { logd("VoNR setting from telephony.db:" + setting + " ,vonr_enabled_bool:" + mIsVonrEnabledByCarrier); + mIsVonrEnabledByCarrier + " ,vonr_on_by_default_bool:" + mDefaultVonr); if (!mIsVonrEnabledByCarrier) { mCi.setVoNrEnabled(false, obtainMessage(EVENT_SET_VONR_ENABLED_DONE), null); } else if (setting == 1 || setting == -1) { } else if (setting == -1) { mCi.setVoNrEnabled(mDefaultVonr, obtainMessage(EVENT_SET_VONR_ENABLED_DONE), null); } else if (setting == 1) { mCi.setVoNrEnabled(true, obtainMessage(EVENT_SET_VONR_ENABLED_DONE), null); } else if (setting == 0) { mCi.setVoNrEnabled(false, obtainMessage(EVENT_SET_VONR_ENABLED_DONE), null); Loading
src/java/com/android/internal/telephony/NetworkTypeController.java +36 −12 Original line number Diff line number Diff line Loading @@ -152,6 +152,7 @@ public class NetworkTypeController extends StateMachine { private boolean mIsTimerResetEnabledForLegacyStateRRCIdle; private int mLtePlusThresholdBandwidth; private int mNrAdvancedThresholdBandwidth; private boolean mIncludeLteForNrAdvancedThresholdBandwidth; private int[] mAdditionalNrAdvancedBandsList; private String mPrimaryTimerState; private String mSecondaryTimerState; Loading Loading @@ -259,6 +260,9 @@ public class NetworkTypeController extends StateMachine { CarrierConfigManager.KEY_LTE_PLUS_THRESHOLD_BANDWIDTH_KHZ_INT); mNrAdvancedThresholdBandwidth = CarrierConfigManager.getDefaultConfig().getInt( CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT); mIncludeLteForNrAdvancedThresholdBandwidth = CarrierConfigManager.getDefaultConfig() .getBoolean(CarrierConfigManager .KEY_INCLUDE_LTE_FOR_NR_ADVANCED_THRESHOLD_BANDWIDTH_BOOL); mEnableNrAdvancedWhileRoaming = CarrierConfigManager.getDefaultConfig().getBoolean( CarrierConfigManager.KEY_ENABLE_NR_ADVANCED_WHILE_ROAMING_BOOL); Loading Loading @@ -294,6 +298,9 @@ public class NetworkTypeController extends StateMachine { mNrAdvancedThresholdBandwidth = b.getInt( CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT, mNrAdvancedThresholdBandwidth); mIncludeLteForNrAdvancedThresholdBandwidth = b.getBoolean(CarrierConfigManager .KEY_INCLUDE_LTE_FOR_NR_ADVANCED_THRESHOLD_BANDWIDTH_BOOL, mIncludeLteForNrAdvancedThresholdBandwidth); mAdditionalNrAdvancedBandsList = b.getIntArray( CarrierConfigManager.KEY_ADDITIONAL_NR_ADVANCED_BANDS_INT_ARRAY); mNrAdvancedCapablePcoId = b.getInt( Loading Loading @@ -977,19 +984,21 @@ public class NetworkTypeController extends StateMachine { } private void updateNrAdvancedState() { log("updateNrAdvancedState"); if (!isNrConnected()) { if (!isNrConnected() && getDataNetworkType() != TelephonyManager.NETWORK_TYPE_NR) { log("NR state changed. Sending EVENT_NR_STATE_CHANGED"); sendMessage(EVENT_NR_STATE_CHANGED); return; } if (!isNrAdvanced()) { boolean isNrAdvanced = isNrAdvanced(); if (isNrAdvanced != mIsNrAdvanced) { if (!isNrAdvanced) { if (DBG) log("updateNrAdvancedState: CONNECTED_NR_ADVANCED -> CONNECTED"); transitionWithTimerTo(mNrConnectedState); transitionWithTimerTo(mNrConnectedState, STATE_CONNECTED); } else { if (DBG) log("updateNrAdvancedState: CONNECTED -> CONNECTED_NR_ADVANCED"); transitionTo(mNrConnectedState); } } mIsNrAdvanced = isNrAdvanced(); log("mIsNrAdvanced=" + mIsNrAdvanced); } Loading @@ -998,7 +1007,10 @@ public class NetworkTypeController extends StateMachine { private final NrConnectedState mNrConnectedState = new NrConnectedState(); private void transitionWithTimerTo(IState destState) { String destName = destState.getName(); transitionWithTimerTo(destState, destState.getName()); } private void transitionWithTimerTo(IState destState, String destName) { if (DBG) log("Transition with primary timer from " + mPreviousState + " to " + destName); OverrideTimerRule rule = mOverrideTimerRules.get(mPreviousState); if (!mIsDeviceIdleMode && rule != null && rule.getTimer(destName) > 0) { Loading Loading @@ -1075,6 +1087,8 @@ public class NetworkTypeController extends StateMachine { removeMessages(EVENT_PRIMARY_TIMER_EXPIRED); mIsPrimaryTimerActive = false; mPrimaryTimerState = ""; transitionToCurrentState(); return; } if (mIsSecondaryTimerActive && !mSecondaryTimerState.equals(currentState)) { Loading @@ -1086,6 +1100,8 @@ public class NetworkTypeController extends StateMachine { removeMessages(EVENT_SECONDARY_TIMER_EXPIRED); mIsSecondaryTimerActive = false; mSecondaryTimerState = ""; transitionToCurrentState(); return; } if (mIsPrimaryTimerActive || mIsSecondaryTimerActive) { Loading Loading @@ -1223,11 +1239,19 @@ public class NetworkTypeController extends StateMachine { return false; } int bandwidths = 0; if (mPhone.getServiceStateTracker().getPhysicalChannelConfigList() != null) { bandwidths = mPhone.getServiceStateTracker().getPhysicalChannelConfigList() .stream() .filter(config -> mIncludeLteForNrAdvancedThresholdBandwidth || config.getNetworkType() == TelephonyManager.NETWORK_TYPE_NR) .map(PhysicalChannelConfig::getCellBandwidthDownlinkKhz) .mapToInt(Integer::intValue) .sum(); } // Check if meeting minimum bandwidth requirement. For most carriers, there is no minimum // bandwidth requirement and mNrAdvancedThresholdBandwidth is 0. if (mNrAdvancedThresholdBandwidth > 0 && IntStream.of(mPhone.getServiceState().getCellBandwidths()).sum() < mNrAdvancedThresholdBandwidth) { if (mNrAdvancedThresholdBandwidth > 0 && bandwidths < mNrAdvancedThresholdBandwidth) { return false; } Loading
src/java/com/android/internal/telephony/SubscriptionController.java +4 −10 Original line number Diff line number Diff line Loading @@ -2870,15 +2870,9 @@ public class SubscriptionController extends ISub.Stub { subId); TelecomManager telecomManager = mContext.getSystemService(TelecomManager.class); PhoneAccountHandle currentHandle = telecomManager.getUserSelectedOutgoingPhoneAccount(); logd("[setDefaultVoiceSubId] current phoneAccountHandle=" + currentHandle); if (!Objects.equals(currentHandle, newHandle)) { telecomManager.setUserSelectedOutgoingPhoneAccount(newHandle); logd("[setDefaultVoiceSubId] change to phoneAccountHandle=" + newHandle); } else { logd("[setDefaultVoiceSubId] default phoneAccountHandle not changed."); } logd("[setDefaultVoiceSubId] requesting change to phoneAccountHandle=" + newHandle); if (previousDefaultSub != getDefaultSubId()) { sendDefaultChangedBroadcast(getDefaultSubId()); Loading Loading @@ -3604,7 +3598,7 @@ public class SubscriptionController extends ISub.Stub { if (phoneSwitcher == null) { logd("Set preferred data sub: phoneSwitcher is null."); AnomalyReporter.reportAnomaly( UUID.fromString("a3ab0b9d-f2aa-4baf-911d-7096c0d4645a"), UUID.fromString("a73fe57f-4178-4bc3-a7ae-9d7354939274"), "Set preferred data sub: phoneSwitcher is null."); if (callback != null) { try { Loading @@ -3631,7 +3625,7 @@ public class SubscriptionController extends ISub.Stub { PhoneSwitcher phoneSwitcher = PhoneSwitcher.getInstance(); if (phoneSwitcher == null) { AnomalyReporter.reportAnomaly( UUID.fromString("a3ab0b9d-f2aa-4baf-911d-7096c0d4645a"), UUID.fromString("e72747ab-d0aa-4b0e-9dd5-cb99365c6d58"), "Get preferred data sub: phoneSwitcher is null."); return SubscriptionManager.DEFAULT_SUBSCRIPTION_ID; } Loading
src/java/com/android/internal/telephony/data/DataConfigManager.java +19 −0 Original line number Diff line number Diff line Loading @@ -297,6 +297,8 @@ public class DataConfigManager extends Handler { new ConcurrentHashMap<>(); /** Rules for handover between IWLAN and cellular network. */ private @NonNull final List<HandoverRule> mHandoverRuleList = new ArrayList<>(); /** {@code True} keep IMS network in case of moving to non VOPS area; {@code false} otherwise.*/ private boolean mShouldKeepNetworkUpInNonVops = false; /** * Constructor Loading Loading @@ -452,6 +454,7 @@ public class DataConfigManager extends Handler { updateDataRetryRules(); updateMeteredApnTypes(); updateSingleDataNetworkTypeAndCapabilityExemption(); updateVopsConfig(); updateUnmeteredNetworkTypes(); updateBandwidths(); updateTcpBuffers(); Loading Loading @@ -662,6 +665,16 @@ public class DataConfigManager extends Handler { } } /** * Update the voice over PS related config from the carrier config. */ private void updateVopsConfig() { synchronized (this) { mShouldKeepNetworkUpInNonVops = mCarrierConfig.getBoolean(CarrierConfigManager .Ims.KEY_KEEP_PDN_UP_IN_NO_VOPS_BOOL); } } /** * @return The list of {@link NetworkType} that only supports single data networks */ Loading @@ -677,6 +690,11 @@ public class DataConfigManager extends Handler { return Collections.unmodifiableSet(mCapabilitiesExemptFromSingleDataList); } /** {@code True} keep IMS network in case of moving to non VOPS area; {@code false} otherwise.*/ public boolean shouldKeepNetworkUpInNonVops() { return mShouldKeepNetworkUpInNonVops; } /** * @return Whether {@link NetworkCapabilities#NET_CAPABILITY_TEMPORARILY_NOT_METERED} * is supported by the carrier. Loading Loading @@ -1289,6 +1307,7 @@ public class DataConfigManager extends Handler { pw.println("Capabilities exempt from single PDN=" + mCapabilitiesExemptFromSingleDataList .stream().map(DataUtils::networkCapabilityToString) .collect(Collectors.joining(","))); pw.println("mShouldKeepNetworkUpInNoVops=" + mShouldKeepNetworkUpInNonVops); pw.println("Unmetered network types=" + String.join(",", mUnmeteredNetworkTypes)); pw.println("Roaming unmetered network types=" + String.join(",", mRoamingUnmeteredNetworkTypes)); Loading