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

Commit c069f921 authored by Filip Gruszczynski's avatar Filip Gruszczynski
Browse files

Make burn in protection updates happen on the minute.

Bug: 20052872

Change-Id: Iff7e081a9ae99b457024537b8c64b7c2572b6172
parent 7278d89c
Loading
Loading
Loading
Loading
+24 −4
Original line number Original line Diff line number Diff line
@@ -11,6 +11,7 @@ import android.content.IntentFilter;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.display.DisplayManagerInternal;
import android.os.SystemClock;
import android.os.SystemClock;
import android.util.Slog;
import android.view.Display;
import android.view.Display;
import android.view.animation.LinearInterpolator;
import android.view.animation.LinearInterpolator;


@@ -29,6 +30,8 @@ public class BurnInProtectionHelper implements DisplayManager.DisplayListener,
    private static final long BURNIN_PROTECTION_WAKEUP_INTERVAL_MS = TimeUnit.MINUTES.toMillis(1);
    private static final long BURNIN_PROTECTION_WAKEUP_INTERVAL_MS = TimeUnit.MINUTES.toMillis(1);
    private static final long BURNIN_PROTECTION_MINIMAL_INTERVAL_MS = TimeUnit.SECONDS.toMillis(10);
    private static final long BURNIN_PROTECTION_MINIMAL_INTERVAL_MS = TimeUnit.SECONDS.toMillis(10);


    private static final boolean DEBUG = false;

    private static final String ACTION_BURN_IN_PROTECTION =
    private static final String ACTION_BURN_IN_PROTECTION =
            "android.internal.policy.action.BURN_IN_PROTECTION";
            "android.internal.policy.action.BURN_IN_PROTECTION";


@@ -61,6 +64,9 @@ public class BurnInProtectionHelper implements DisplayManager.DisplayListener,
    private BroadcastReceiver mBurnInProtectionReceiver = new BroadcastReceiver() {
    private BroadcastReceiver mBurnInProtectionReceiver = new BroadcastReceiver() {
        @Override
        @Override
        public void onReceive(Context context, Intent intent) {
        public void onReceive(Context context, Intent intent) {
            if (DEBUG) {
                Slog.d(TAG, "onReceive " + intent);
            }
            updateBurnInProtection();
            updateBurnInProtection();
        }
        }
    };
    };
@@ -120,12 +126,26 @@ public class BurnInProtectionHelper implements DisplayManager.DisplayListener,
                mDisplayManagerInternal.setDisplayOffsets(mDisplay.getDisplayId(),
                mDisplayManagerInternal.setDisplayOffsets(mDisplay.getDisplayId(),
                        mLastBurnInXOffset, mLastBurnInYOffset);
                        mLastBurnInXOffset, mLastBurnInYOffset);
            }
            }
            // We use currentTimeMillis to compute the next wakeup time since we want to wake up at
            // the same time as we wake up to update ambient mode to minimize power consumption.
            // However, we use elapsedRealtime to schedule the alarm so that setting the time can't
            // disable burn-in protection for extended periods.
            final long nowWall = System.currentTimeMillis();
            final long nowElapsed = SystemClock.elapsedRealtime();
            // Next adjustment at least ten seconds in the future.
            // Next adjustment at least ten seconds in the future.
            long next = SystemClock.elapsedRealtime() + BURNIN_PROTECTION_MINIMAL_INTERVAL_MS;
            long nextWall = nowWall + BURNIN_PROTECTION_MINIMAL_INTERVAL_MS;
            // And aligned to the minute.
            // And aligned to the minute.
            next = next - next % BURNIN_PROTECTION_WAKEUP_INTERVAL_MS
            nextWall = nextWall - nextWall % BURNIN_PROTECTION_WAKEUP_INTERVAL_MS
                    + BURNIN_PROTECTION_WAKEUP_INTERVAL_MS;
                    + BURNIN_PROTECTION_WAKEUP_INTERVAL_MS;
            mAlarmManager.set(AlarmManager.ELAPSED_REALTIME, next, mBurnInProtectionIntent);
            // Use elapsed real time that is adjusted to full minute on wall clock.
            final long nextElapsed = nowElapsed + (nextWall - nowWall);
            if (DEBUG) {
                Slog.d(TAG, "scheduling next wake-up, now wall time " + nowWall
                        + ", next wall: " + nextWall + ", now elapsed: " + nowElapsed
                        + ", next elapsed: " + nextElapsed);
            }
            mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME, nextElapsed,
                    mBurnInProtectionIntent);
        } else {
        } else {
            mAlarmManager.cancel(mBurnInProtectionIntent);
            mAlarmManager.cancel(mBurnInProtectionIntent);
            mCenteringAnimator.start();
            mCenteringAnimator.start();