summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRambo Wang <rambowang@google.com>2021-09-14 16:49:11 -0700
committerRambo Wang <rambowang@google.com>2021-09-21 10:13:11 -0700
commit5fe9ded12eb5ec1072b0f1aacd9c1d2592573713 (patch)
tree14a03fa49daa7bd2267d7aab312633ffc93ed9de
parentd9a274cfa24645c2ce90156f57e601f9fae19797 (diff)
Limit the uniqueness of SignalMeasurementType instead of RAN in
SignalStrengthUpdateRequest Support different SignalMeasurementType with same type of RAN is valid user case. For example, client may be interested to measure both RSRP and RSRQ for EUTRAN. Throw IAE if the SignalThresholdInfo collection is empty. This is behavior specified in the public interface. Bug: 198318496 Test: atest SignalStrengthUpdateRequestTest Merged-In: I87ea5e356189f61fc58dff80456aff35ea2a8e55 Change-Id: I87ea5e356189f61fc58dff80456aff35ea2a8e55 (cherry picked from commit 924964767c85b6daf84b44d9052b792ec1fc668d)
-rw-r--r--telephony/java/android/telephony/SignalStrengthUpdateRequest.java27
1 files changed, 20 insertions, 7 deletions
diff --git a/telephony/java/android/telephony/SignalStrengthUpdateRequest.java b/telephony/java/android/telephony/SignalStrengthUpdateRequest.java
index fe7e5976b132..41e24ddb3fa6 100644
--- a/telephony/java/android/telephony/SignalStrengthUpdateRequest.java
+++ b/telephony/java/android/telephony/SignalStrengthUpdateRequest.java
@@ -26,8 +26,10 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -101,9 +103,11 @@ public final class SignalStrengthUpdateRequest implements Parcelable {
}
mSignalThresholdInfos = new ArrayList<>(signalThresholdInfos);
- // Sort the collection with RAN ascending order, make the ordering not matter for equals
+ // Sort the collection with RAN and then SignalMeasurementType ascending order, make the
+ // ordering not matter for equals
mSignalThresholdInfos.sort(
- Comparator.comparingInt(SignalThresholdInfo::getRadioAccessNetworkType));
+ Comparator.comparingInt(SignalThresholdInfo::getRadioAccessNetworkType)
+ .thenComparing(SignalThresholdInfo::getSignalMeasurementType));
return this;
}
@@ -144,7 +148,7 @@ public final class SignalStrengthUpdateRequest implements Parcelable {
* @return the SignalStrengthUpdateRequest object
*
* @throws IllegalArgumentException if the SignalThresholdInfo collection is empty size, the
- * radio access network type in the collection is not unique
+ * signal measurement type for the same RAN in the collection is not unique
*/
public @NonNull SignalStrengthUpdateRequest build() {
return new SignalStrengthUpdateRequest(mSignalThresholdInfos,
@@ -258,14 +262,23 @@ public final class SignalStrengthUpdateRequest implements Parcelable {
}
/**
- * Throw IAE when the RAN in the collection is not unique.
+ * Throw IAE if SignalThresholdInfo collection is null or empty,
+ * or the SignalMeasurementType for the same RAN in the collection is not unique.
*/
private static void validate(Collection<SignalThresholdInfo> infos) {
- Set<Integer> uniqueRan = new HashSet<>(infos.size());
+ if (infos == null || infos.isEmpty()) {
+ throw new IllegalArgumentException("SignalThresholdInfo collection is null or empty");
+ }
+
+ // Map from RAN to set of SignalMeasurementTypes
+ Map<Integer, Set<Integer>> ranToTypes = new HashMap<>(infos.size());
for (SignalThresholdInfo info : infos) {
final int ran = info.getRadioAccessNetworkType();
- if (!uniqueRan.add(ran)) {
- throw new IllegalArgumentException("RAN: " + ran + " is not unique");
+ final int type = info.getSignalMeasurementType();
+ ranToTypes.putIfAbsent(ran, new HashSet<>());
+ if (!ranToTypes.get(ran).add(type)) {
+ throw new IllegalArgumentException(
+ "SignalMeasurementType " + type + " for RAN " + ran + " is not unique");
}
}
}