Merge "Enable SignalThreshold with consideration of both system and apps"
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index f855f34..1e41b38 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -4043,13 +4043,19 @@
}
@Override
- public void setSignalStrengthReportingCriteria(
- int signalStrengthMeasure, int[] thresholds, int ran, boolean isEnabled) {
+ public void setSignalStrengthReportingCriteria(int signalStrengthMeasure,
+ int[] systemThresholds, int ran, boolean isEnabledForSystem) {
int[] consolidatedThresholds = mSST.getConsolidatedSignalThresholds(
ran,
signalStrengthMeasure,
- mSST.shouldHonorSystemThresholds() ? thresholds : new int[]{},
+ isEnabledForSystem && mSST.shouldHonorSystemThresholds() ? systemThresholds
+ : new int[]{},
REPORTING_HYSTERESIS_DB);
+ boolean isEnabledForAppRequest = mSST.shouldEnableSignalThresholdForAppRequest(
+ ran,
+ signalStrengthMeasure,
+ getSubId(),
+ isDeviceIdle());
mCi.setSignalStrengthReportingCriteria(
new SignalThresholdInfo.Builder()
.setRadioAccessNetworkType(ran)
@@ -4057,7 +4063,7 @@
.setHysteresisMs(REPORTING_HYSTERESIS_MILLIS)
.setHysteresisDb(REPORTING_HYSTERESIS_DB)
.setThresholds(consolidatedThresholds, true /*isSystem*/)
- .setIsEnabled(isEnabled)
+ .setIsEnabled(isEnabledForSystem || isEnabledForAppRequest)
.build(),
ran, null);
}
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index fb7f8f5..d036721 100755
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -6242,8 +6242,7 @@
continue;
}
for (SignalThresholdInfo info : record.mRequest.getSignalThresholdInfos()) {
- if (ran == info.getRadioAccessNetworkType()
- && measurement == info.getSignalMeasurementType()) {
+ if (isRanAndSignalMeasurementTypeMatch(ran, measurement, info)) {
for (int appThreshold : info.getThresholds()) {
target.add(appThreshold);
}
@@ -6274,12 +6273,44 @@
sendMessage(obtainMessage(EVENT_ON_DEVICE_IDLE_STATE_CHANGED, isDeviceIdle));
}
+ boolean shouldEnableSignalThresholdForAppRequest(
+ @AccessNetworkConstants.RadioAccessNetworkType int ran,
+ @SignalThresholdInfo.SignalMeasurementType int measurement,
+ int subId,
+ boolean isDeviceIdle) {
+ for (SignalRequestRecord record : mSignalRequestRecords) {
+ if (subId != record.mSubId) {
+ continue;
+ }
+ for (SignalThresholdInfo info : record.mRequest.getSignalThresholdInfos()) {
+ if (isRanAndSignalMeasurementTypeMatch(ran, measurement, info)
+ && (!isDeviceIdle || isSignalReportRequestedWhileIdle(record.mRequest))) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private static boolean isRanAndSignalMeasurementTypeMatch(
+ @AccessNetworkConstants.RadioAccessNetworkType int ran,
+ @SignalThresholdInfo.SignalMeasurementType int measurement,
+ SignalThresholdInfo info) {
+ return ran == info.getRadioAccessNetworkType()
+ && measurement == info.getSignalMeasurementType();
+ }
+
+ private static boolean isSignalReportRequestedWhileIdle(SignalStrengthUpdateRequest request) {
+ return request.isSystemThresholdReportingRequestedWhileIdle()
+ || request.isReportingRequestedWhileIdle();
+ }
+
private class SignalRequestRecord implements IBinder.DeathRecipient {
final int mSubId; // subId the request originally applied to
final int mCallingUid;
final SignalStrengthUpdateRequest mRequest;
- SignalRequestRecord(int subId, int uid, SignalStrengthUpdateRequest request) {
+ SignalRequestRecord(int subId, int uid, @NonNull SignalStrengthUpdateRequest request) {
this.mCallingUid = uid;
this.mSubId = subId;
this.mRequest = request;
@@ -6294,8 +6325,7 @@
private void updateAlwaysReportSignalStrength() {
final int curSubId = mPhone.getSubId();
boolean alwaysReport = mSignalRequestRecords.stream().anyMatch(
- srr -> srr.mSubId == curSubId && (srr.mRequest.isReportingRequestedWhileIdle()
- || srr.mRequest.isSystemThresholdReportingRequestedWhileIdle()));
+ srr -> srr.mSubId == curSubId && isSignalReportRequestedWhileIdle(srr.mRequest));
// TODO(b/177924721): TM#setAlwaysReportSignalStrength will be removed and we will not
// worry about unset flag which was set by other client.