Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2a386df6 authored by Rambo Wang's avatar Rambo Wang Committed by Automerger Merge Worker
Browse files

Enable SignalThreshold with consideration of both system and apps am: 9da5fbf6

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/15067928

Change-Id: Icd7f5d50909527f8651cd41b69e233c444d2f4ee
parents ff5b8c8f 9da5fbf6
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -4068,13 +4068,19 @@ public class GsmCdmaPhone extends Phone {
    }

    @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)
@@ -4082,7 +4088,7 @@ public class GsmCdmaPhone extends Phone {
                        .setHysteresisMs(REPORTING_HYSTERESIS_MILLIS)
                        .setHysteresisDb(REPORTING_HYSTERESIS_DB)
                        .setThresholds(consolidatedThresholds, true /*isSystem*/)
                        .setIsEnabled(isEnabled)
                        .setIsEnabled(isEnabledForSystem || isEnabledForAppRequest)
                        .build(),
                ran, null);
    }
+35 −5
Original line number Diff line number Diff line
@@ -6320,8 +6320,7 @@ public class ServiceStateTracker extends Handler {
                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);
                    }
@@ -6352,12 +6351,44 @@ public class ServiceStateTracker extends Handler {
        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;
@@ -6372,8 +6403,7 @@ public class ServiceStateTracker extends Handler {
    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.