aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-12-11 22:35:22 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-12-11 22:35:22 +0000
commit8f22ba0a89359f609c3e74cabd43a29a81b82e99 (patch)
tree19fbfc85ea891f418fe6fd2b133abe892699d2ab
parent3622af7faaa7d544b3e2811a54fd6c89435bf8f9 (diff)
parent1d981a0b4c87ce6ccea6558a4ab51870bcbee41d (diff)
downloadtelephony-android13-mainline-mediaprovider-release.tar.gz
Snap for 9392927 from 1d981a0b4c87ce6ccea6558a4ab51870bcbee41d to mainline-mediaprovider-releaseaml_mpr_331812020aml_mpr_331711020aml_mpr_331613010aml_mpr_331512020android13-mainline-mediaprovider-release
Change-Id: Iec314bf7efe52ffeeabeb099e85233d1349898f5
-rw-r--r--src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java62
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java5
2 files changed, 62 insertions, 5 deletions
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index 891570b751..5b8aca5aa3 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -23,6 +23,7 @@ import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIV
import static com.android.internal.telephony.Phone.CS_FALLBACK;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.app.usage.NetworkStatsManager;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.BroadcastReceiver;
@@ -925,8 +926,10 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
* {@code ImsReasonInfo#CODE_*} value.
*
* See {@link CarrierConfigManager#KEY_IMS_REASONINFO_MAPPING_STRING_ARRAY}.
+ * This ImsReasonInfoKeyPair with this key stating will consider getExtraMessage a match
+ * if the carrier config messages starts with getExtraMessage result.
*/
- private Map<Pair<Integer, String>, Integer> mImsReasonCodeMap = new ArrayMap<>();
+ private Map<ImsReasonInfoKeyPair, Integer> mImsReasonCodeMap = new ArrayMap<>();
/**
@@ -985,6 +988,54 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
// Used for important operational related events for logging.
private final LocalLog mOperationLocalLog = new LocalLog(64);
+ /**
+ * Container to ease passing around a tuple of two objects. This object provides a sensible
+ * implementation of equals(), returning true/false using equals() for one object (Integer)
+ * and startsWith() for another object (String). Also the startsWith() in this equals() method
+ * will return true for A.startsWith(B) if B.second starts with A.second.
+ */
+ private static class ImsReasonInfoKeyPair extends Pair<Integer, String> {
+
+ /**
+ * Constructor for a ImsReasonInfoKeyPair.
+ *
+ * @param first Integer in the ImsReasonInfoKeyPair
+ * @param second String in the ImsReasonInfoKeyPair
+ */
+ private ImsReasonInfoKeyPair(Integer first, String second) {
+ super(first, second);
+ }
+
+ /**
+ * Checks the two objects for equality by delegating to their respective
+ * {@link Object#equals(Object)} methods.
+ *
+ * @param o the {@link com.android.internal.telephony.imsphone.ImsReasonInfoKeyPair} to
+ * which this one is to be checked for equality
+ * @return true if the underlying objects of the ImsReasonInfoKeyPair are
+ * considered equal and startsWith
+ */
+ @Override
+ public boolean equals(@Nullable Object o) {
+ if (!(o instanceof ImsReasonInfoKeyPair)) {
+ return false;
+ }
+ ImsReasonInfoKeyPair p = (ImsReasonInfoKeyPair) o;
+
+ return Objects.equals(p.first, first)
+ && Objects.toString(second).startsWith(Objects.toString(p.second));
+ }
+
+ /**
+ * Compute a hash code using the hash code of the Integer key
+ *
+ * @return a hashcode of the first
+ */
+ @Override
+ public int hashCode() {
+ return (first == null ? 0 : first.hashCode());
+ }
+ }
//***** Events
@@ -2824,7 +2875,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
if (message != null) {
message = message.toLowerCase();
}
- mImsReasonCodeMap.put(new Pair<>(fromCode, message), toCode);
+ mImsReasonCodeMap.put(new ImsReasonInfoKeyPair(fromCode, message), toCode);
}
/**
@@ -2847,9 +2898,10 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
}
log("maybeRemapReasonCode : fromCode = " + reasonInfo.getCode() + " ; message = "
+ reason);
- Pair<Integer, String> toCheck = new Pair<>(code, reason);
- Pair<Integer, String> wildcardToCheck = new Pair<>(null, reason);
- Pair<Integer, String> wildcardMessageToCheck = new Pair<>(code, null);
+ ImsReasonInfoKeyPair toCheck = new ImsReasonInfoKeyPair(code, reason);
+ ImsReasonInfoKeyPair wildcardToCheck = new ImsReasonInfoKeyPair(null, reason);
+ ImsReasonInfoKeyPair wildcardMessageToCheck = new ImsReasonInfoKeyPair(code, null);
+
if (mImsReasonCodeMap.containsKey(toCheck)) {
int toCode = mImsReasonCodeMap.get(toCheck);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java
index 1428b254ed..ec2209db00 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java
@@ -1006,7 +1006,9 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest {
PersistableBundle bundle = new PersistableBundle();
String[] mappings = new String[]{
"1014|call completed elsewhere|1014",
+ "1014|Call Rejected By User|510",
"1014|*|510",
+ "510|Call completed elsewhere|1014",
};
bundle.putStringArray(CarrierConfigManager.KEY_IMS_REASONINFO_MAPPING_STRING_ARRAY,
mappings);
@@ -1024,6 +1026,9 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest {
new ImsReasonInfo(1014, 200, "Call Rejected By User"))); // 1014 -> 510
assertEquals(ImsReasonInfo.CODE_ANSWERED_ELSEWHERE, mCTUT.maybeRemapReasonCode(
new ImsReasonInfo(1014, 200, "Call completed elsewhere"))); // 1014 -> 1014
+ assertEquals(ImsReasonInfo.CODE_ANSWERED_ELSEWHERE, mCTUT.maybeRemapReasonCode(
+ new ImsReasonInfo(510, 200,
+ "Call completed elsewhere by instance urn:gsma:imei:xxx"))); // 510 -> 1014
// Simulate that after SIM swap the new carrier config doesn't have the mapping for 1014
loadReasonCodeRemapCarrierConfig();