Snap for 12763142 from 84f7a57a3952d8eac49a9f3e825f823acabe6a8b to 25Q1-release
Change-Id: I342768fef8fa0020e60e29daec5c4f4ac7d60599
diff --git a/flags/calling.aconfig b/flags/calling.aconfig
index 65cfbaf..27d3518 100644
--- a/flags/calling.aconfig
+++ b/flags/calling.aconfig
@@ -71,3 +71,14 @@
bug:"359064059"
is_exported: true
}
+
+# OWNER=sewookseo TARGET=25Q2
+flag {
+ name: "pass_copied_call_state_list"
+ namespace: "telephony"
+ description: "To prevent passing the TelephonyRegistry's original instance to listeners in the same process"
+ bug:"379126049"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
\ No newline at end of file
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index 5998d46..a2b919f 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -2821,6 +2821,7 @@
* @param response Callback message.
*/
public void resetModemConfig(Message response) {
+ if (mFeatureFlags.cleanupCdma()) return;
mCi.nvResetConfig(3 /* factory NV reset */, response);
}
@@ -2830,6 +2831,7 @@
* @param response Callback message.
*/
public void eraseModemConfig(Message response) {
+ if (mFeatureFlags.cleanupCdma()) return;
mCi.nvResetConfig(2 /* erase NV */, response);
}
diff --git a/src/java/com/android/internal/telephony/RILUtils.java b/src/java/com/android/internal/telephony/RILUtils.java
index 8f0060b..eb86499 100644
--- a/src/java/com/android/internal/telephony/RILUtils.java
+++ b/src/java/com/android/internal/telephony/RILUtils.java
@@ -387,6 +387,7 @@
import com.android.internal.telephony.cdma.sms.SmsEnvelope;
import com.android.internal.telephony.data.KeepaliveStatus;
import com.android.internal.telephony.data.KeepaliveStatus.KeepaliveStatusCode;
+import com.android.internal.telephony.flags.Flags;
import com.android.internal.telephony.imsphone.ImsCallInfo;
import com.android.internal.telephony.uicc.AdnCapacity;
import com.android.internal.telephony.uicc.IccCardApplicationStatus;
@@ -1173,6 +1174,10 @@
* 2 - erase NV reset (SCRTN)
* 3 - factory reset (RTN)
*/
+ if (Flags.cleanupCdma()) {
+ if (resetType == 1) return android.hardware.radio.V1_0.ResetNvType.RELOAD;
+ return -1;
+ }
switch (resetType) {
case 1: return android.hardware.radio.V1_0.ResetNvType.RELOAD;
case 2: return android.hardware.radio.V1_0.ResetNvType.ERASE;
@@ -1193,6 +1198,10 @@
* 2 - erase NV reset (SCRTN)
* 3 - factory reset (RTN)
*/
+ if (Flags.cleanupCdma()) {
+ if (resetType == 1) return android.hardware.radio.modem.ResetNvType.RELOAD;
+ return -1;
+ }
switch (resetType) {
case 1: return android.hardware.radio.modem.ResetNvType.RELOAD;
case 2: return android.hardware.radio.modem.ResetNvType.ERASE;
@@ -1689,6 +1698,9 @@
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_NR) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.NR;
}
+ if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_NB_IOT_NTN) != 0) {
+ raf |= android.hardware.radio.RadioAccessFamily.NB_IOT_NTN;
+ }
return (raf == 0) ? android.hardware.radio.RadioAccessFamily.UNKNOWN : raf;
}
diff --git a/src/java/com/android/internal/telephony/RadioConfigProxy.java b/src/java/com/android/internal/telephony/RadioConfigProxy.java
index 9f34e29..153747b 100644
--- a/src/java/com/android/internal/telephony/RadioConfigProxy.java
+++ b/src/java/com/android/internal/telephony/RadioConfigProxy.java
@@ -281,7 +281,11 @@
}
public void linkToDeath(long cookie) throws RemoteException {
- mService.linkToDeath(this, cookie);
+ if (mService != null) {
+ mService.linkToDeath(this, cookie);
+ } else {
+ Rlog.w(TAG, "linkToDeath: skipping since mService is null");
+ }
}
public void clear() {
@@ -316,7 +320,11 @@
}
public void linkToDeath(int cookie) throws RemoteException {
- mService.linkToDeath(this, cookie);
+ if (mService != null) {
+ mService.linkToDeath(this, cookie);
+ } else {
+ Rlog.w(TAG, "linkToDeath: skipping since mService is null");
+ }
}
public void clear() {
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTest.java b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTest.java
index 4c42e2e..05107df 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTest.java
@@ -173,6 +173,7 @@
rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_TD_SCDMA, false));
rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN, false));
rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_NR, false));
+ rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_NB_IOT_NTN, false));
for (Pair<Integer, Boolean> rat : rats) {
boolean isCdma = rat.second;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/TelephonyRegistryTest.java b/tests/telephonytests/src/com/android/internal/telephony/TelephonyRegistryTest.java
index 0449f8a..e5aa541 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/TelephonyRegistryTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/TelephonyRegistryTest.java
@@ -56,6 +56,7 @@
import android.telephony.AccessNetworkConstants;
import android.telephony.Annotation;
import android.telephony.BarringInfo;
+import android.telephony.CallState;
import android.telephony.CellIdentity;
import android.telephony.CellIdentityGsm;
import android.telephony.CellIdentityLte;
@@ -141,6 +142,7 @@
private int[] mCarrierRoamingNtnAvailableServices;
private NtnSignalStrength mCarrierRoamingNtnSignalStrength;
private boolean mIsSatelliteEnabled;
+ private final List<List<CallState>> mCallStateList = new ArrayList<>();
// All events contribute to TelephonyRegistry#isPhoneStatePermissionRequired
private static final Set<Integer> READ_PHONE_STATE_EVENTS;
@@ -224,7 +226,8 @@
TelephonyCallback.EmergencyCallbackModeListener,
TelephonyCallback.CarrierRoamingNtnModeListener,
TelephonyCallback.SecurityAlgorithmsListener,
- TelephonyCallback.CellularIdentifierDisclosedListener {
+ TelephonyCallback.CellularIdentifierDisclosedListener,
+ TelephonyCallback.CallAttributesListener {
// This class isn't mockable to get invocation counts because the IBinder is null and
// crashes the TelephonyRegistry. Make a cheesy verify(times()) alternative.
public AtomicInteger invocationCount = new AtomicInteger(0);
@@ -374,6 +377,12 @@
public void onCellularIdentifierDisclosedChanged(CellularIdentifierDisclosure disclosure) {
invocationCount.incrementAndGet();
}
+
+ @Override
+ public void onCallStatesChanged(List<CallState> callStateList) {
+ invocationCount.incrementAndGet();
+ mCallStateList.add(callStateList);
+ }
}
public class MySatelliteStateChangeListener implements ISatelliteStateChangeListener {
@@ -448,6 +457,7 @@
mPhysicalChannelConfigs = null;
}
mCellLocation = null;
+ mCallStateList.clear();
super.tearDown();
}
@@ -1772,6 +1782,37 @@
}
@Test
+ @EnableFlags(Flags.FLAG_PASS_COPIED_CALL_STATE_LIST)
+ public void testNotifyPreciseCallStateChangedInProcess() {
+ doReturn(mMockSubInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(anyInt());
+ doReturn(0/*slotIndex*/).when(mMockSubInfo).getSimSlotIndex();
+
+ final int subId = 1;
+ int[] events = {TelephonyCallback.EVENT_CALL_ATTRIBUTES_CHANGED};
+
+ mTelephonyRegistry.listenWithEventList(false, false, subId, mContext.getOpPackageName(),
+ mContext.getAttributionTag(), mTelephonyCallback.callback, events, false);
+ processAllMessages();
+
+ int[] callState = {0, 5, 0};
+ String[] imsCallId = {"0", "1", "0"};
+ int[] imsServiceType = {0, 1, 0};
+ int[] imsCallType = {0, 1, 0};
+ int[] callState2 = {0, 1, 0};
+ mTelephonyRegistry.notifyPreciseCallState(
+ /*phoneId*/ 0, subId, callState, imsCallId, imsServiceType, imsCallType);
+ mTelephonyRegistry.notifyPreciseCallState(
+ /*phoneId*/ 0, subId, callState2, imsCallId, imsServiceType, imsCallType);
+ processAllMessages();
+
+ assertEquals(2, mCallStateList.size());
+ //make sure the call state is from the first report(callState).
+ assertEquals(5, mCallStateList.get(0).getFirst().getCallState());
+ //make sure the call state is from the second report(callState2).
+ assertEquals(1, mCallStateList.get(1).getFirst().getCallState());
+ }
+
+ @Test
@EnableFlags(Flags.FLAG_CARRIER_ROAMING_NB_IOT_NTN)
public void testNotifyCarrierRoamingNtnSignalStrengthChanged() {
int subId = INVALID_SUBSCRIPTION_ID;