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

Commit efa1c713 authored by Neil Fuller's avatar Neil Fuller
Browse files

TimeDetectorStrategyImpl tidy ups / de-duping logic

Remove a small amount of duplication and tidy ups.

Bug: 236612872
Test: build / treehugger only
Change-Id: I240662e942e53f33e6b912e4d1338cec058e382b
parent 4841be3d
Loading
Loading
Loading
Loading
+50 −43
Original line number Diff line number Diff line
@@ -300,6 +300,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy {
    }

    @Override
    @NonNull
    public synchronized TimeState getTimeState() {
        boolean userShouldConfirmTime = mEnvironment.systemClockConfidence() < TIME_CONFIDENCE_HIGH;
        UnixEpochTime unixEpochTime = new UnixEpochTime(
@@ -330,38 +331,33 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy {
    public synchronized boolean confirmTime(@NonNull UnixEpochTime confirmationTime) {
        Objects.requireNonNull(confirmationTime);

        @TimeConfidence int newTimeConfidence = TIME_CONFIDENCE_HIGH;
        @TimeConfidence int currentTimeConfidence = mEnvironment.systemClockConfidence();
        boolean timeNeedsConfirmation = currentTimeConfidence < newTimeConfidence;

        // All system clock calculation take place under a wake lock.
        mEnvironment.acquireWakeLock();
        try {
            // Check if the specified time matches the current system clock time (closely
            // enough) to raise the confidence.
            long elapsedRealtimeMillis = mEnvironment.elapsedRealtimeMillis();
            long actualSystemClockMillis = mEnvironment.systemClockMillis();
            long adjustedAutoDetectedUnixEpochMillis =
                    confirmationTime.at(elapsedRealtimeMillis).getUnixEpochTimeMillis();
            long absTimeDifferenceMillis =
                    Math.abs(adjustedAutoDetectedUnixEpochMillis - actualSystemClockMillis);
            int confidenceUpgradeThresholdMillis =
                    mCurrentConfigurationInternal.getSystemClockConfidenceThresholdMillis();
            boolean timeConfirmed = absTimeDifferenceMillis <= confidenceUpgradeThresholdMillis;
            boolean updateConfidenceRequired = timeNeedsConfirmation && timeConfirmed;
            if (updateConfidenceRequired) {
            long currentElapsedRealtimeMillis = mEnvironment.elapsedRealtimeMillis();
            long currentSystemClockMillis = mEnvironment.systemClockMillis();
            boolean timeConfirmed = isTimeWithinConfidenceThreshold(
                    confirmationTime, currentElapsedRealtimeMillis, currentSystemClockMillis);
            if (timeConfirmed) {
                @TimeConfidence int newTimeConfidence = TIME_CONFIDENCE_HIGH;
                @TimeConfidence int currentTimeConfidence = mEnvironment.systemClockConfidence();
                boolean confidenceUpgradeRequired = currentTimeConfidence < newTimeConfidence;
                if (confidenceUpgradeRequired) {
                    String logMsg = "Confirm system clock time."
                            + " confirmationTime=" + confirmationTime
                            + " newTimeConfidence=" + newTimeConfidence
                        + " elapsedRealtimeMillis=" + elapsedRealtimeMillis
                        + " (old) actualSystemClockMillis=" + actualSystemClockMillis
                        + " currentTimeConfidence=" + currentTimeConfidence;
                            + " currentElapsedRealtimeMillis=" + currentElapsedRealtimeMillis
                            + " currentSystemClockMillis=" + currentSystemClockMillis
                            + " (old) currentTimeConfidence=" + currentTimeConfidence;
                    if (DBG) {
                        Slog.d(LOG_TAG, logMsg);
                    }

                    mEnvironment.setSystemClockConfidence(newTimeConfidence, logMsg);
                }
            }
            return timeConfirmed;
        } finally {
            mEnvironment.releaseWakeLock();
@@ -470,8 +466,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy {
    }

    @GuardedBy("this")
    private boolean storeTelephonySuggestion(
            @NonNull TelephonyTimeSuggestion suggestion) {
    private boolean storeTelephonySuggestion(@NonNull TelephonyTimeSuggestion suggestion) {
        UnixEpochTime newUnixEpochTime = suggestion.getUnixEpochTime();

        int slotIndex = suggestion.getSlotIndex();
@@ -712,7 +707,8 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy {
    }

    private static int scoreTelephonySuggestion(
            long elapsedRealtimeMillis, @NonNull TelephonyTimeSuggestion timeSuggestion) {
            @ElapsedRealtimeLong long elapsedRealtimeMillis,
            @NonNull TelephonyTimeSuggestion timeSuggestion) {

        // Validate first.
        UnixEpochTime unixEpochTime = timeSuggestion.getUnixEpochTime();
@@ -845,10 +841,12 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy {
    @GuardedBy("this")
    private void upgradeSystemClockConfidenceIfRequired(
            @NonNull UnixEpochTime autoDetectedUnixEpochTime, @NonNull String cause) {

        // Fast path: No need to upgrade confidence if confidence is already high.
        @TimeConfidence int newTimeConfidence = TIME_CONFIDENCE_HIGH;
        @TimeConfidence int currentTimeConfidence = mEnvironment.systemClockConfidence();
        boolean timeNeedsConfirmation = currentTimeConfidence < newTimeConfidence;
        if (!timeNeedsConfirmation) {
        boolean confidenceUpgradeRequired = currentTimeConfidence < newTimeConfidence;
        if (!confidenceUpgradeRequired) {
            return;
        }

@@ -857,23 +855,18 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy {
        try {
            // Check if the specified time matches the current system clock time (closely
            // enough) to raise the confidence.
            long elapsedRealtimeMillis = mEnvironment.elapsedRealtimeMillis();
            long actualSystemClockMillis = mEnvironment.systemClockMillis();
            long adjustedAutoDetectedUnixEpochMillis =
                    autoDetectedUnixEpochTime.at(elapsedRealtimeMillis).getUnixEpochTimeMillis();
            long absTimeDifferenceMillis =
                    Math.abs(adjustedAutoDetectedUnixEpochMillis - actualSystemClockMillis);
            int confidenceUpgradeThresholdMillis =
                    mCurrentConfigurationInternal.getSystemClockConfidenceThresholdMillis();
            boolean updateConfidenceRequired =
                    absTimeDifferenceMillis <= confidenceUpgradeThresholdMillis;
            long currentElapsedRealtimeMillis = mEnvironment.elapsedRealtimeMillis();
            long currentSystemClockMillis = mEnvironment.systemClockMillis();
            boolean updateConfidenceRequired = isTimeWithinConfidenceThreshold(
                    autoDetectedUnixEpochTime, currentElapsedRealtimeMillis,
                    currentSystemClockMillis);
            if (updateConfidenceRequired) {
                String logMsg = "Upgrade system clock confidence."
                        + " autoDetectedUnixEpochTime=" + autoDetectedUnixEpochTime
                        + " newTimeConfidence=" + newTimeConfidence
                        + " cause=" + cause
                        + " elapsedRealtimeMillis=" + elapsedRealtimeMillis
                        + " (old) actualSystemClockMillis=" + actualSystemClockMillis
                        + " currentElapsedRealtimeMillis=" + currentElapsedRealtimeMillis
                        + " currentSystemClockMillis=" + currentSystemClockMillis
                        + " currentTimeConfidence=" + currentTimeConfidence;
                if (DBG) {
                    Slog.d(LOG_TAG, logMsg);
@@ -890,6 +883,19 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy {
        return origin != ORIGIN_MANUAL;
    }

    @GuardedBy("this")
    private boolean isTimeWithinConfidenceThreshold(@NonNull UnixEpochTime timeToCheck,
            @ElapsedRealtimeLong long currentElapsedRealtimeMillis,
            @CurrentTimeMillisLong long currentSystemClockMillis) {
        long adjustedAutoDetectedUnixEpochMillis =
                timeToCheck.at(currentElapsedRealtimeMillis).getUnixEpochTimeMillis();
        long absTimeDifferenceMillis =
                Math.abs(adjustedAutoDetectedUnixEpochMillis - currentSystemClockMillis);
        int confidenceUpgradeThresholdMillis =
                mCurrentConfigurationInternal.getSystemClockConfidenceThresholdMillis();
        return absTimeDifferenceMillis <= confidenceUpgradeThresholdMillis;
    }

    @GuardedBy("this")
    private boolean setSystemClockAndConfidenceUnderWakeLock(
            @Origin int origin, @NonNull UnixEpochTime newTime,
@@ -1066,7 +1072,8 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy {
    }

    private static boolean validateSuggestionUnixEpochTime(
            long currentElapsedRealtimeMillis, UnixEpochTime unixEpochTime) {
            @ElapsedRealtimeLong long currentElapsedRealtimeMillis,
            @NonNull UnixEpochTime unixEpochTime) {
        long suggestionElapsedRealtimeMillis = unixEpochTime.getElapsedRealtimeMillis();
        if (suggestionElapsedRealtimeMillis > currentElapsedRealtimeMillis) {
            // Future elapsed realtimes are ignored. They imply the elapsed realtime was wrong, or