summaryrefslogtreecommitdiffstats
path: root/policy
diff options
context:
space:
mode:
authorFilip Gruszczynski <gruszczy@google.com>2015-04-02 14:35:58 -0700
committerFilip Gruszczynski <gruszczy@google.com>2015-04-02 16:19:35 -0700
commitc069f921d9bf9acf8d14f43049ac01ce43bc3a7e (patch)
tree578994803d0e08ed21f045590e5cbc0185877a03 /policy
parent7278d89c1b51bc937e79021eae523dfd0f3d30a1 (diff)
downloadframeworks_base-c069f921d9bf9acf8d14f43049ac01ce43bc3a7e.zip
frameworks_base-c069f921d9bf9acf8d14f43049ac01ce43bc3a7e.tar.gz
frameworks_base-c069f921d9bf9acf8d14f43049ac01ce43bc3a7e.tar.bz2
Make burn in protection updates happen on the minute.
Bug: 20052872 Change-Id: Iff7e081a9ae99b457024537b8c64b7c2572b6172
Diffstat (limited to 'policy')
-rw-r--r--policy/src/com/android/internal/policy/impl/BurnInProtectionHelper.java28
1 files changed, 24 insertions, 4 deletions
diff --git a/policy/src/com/android/internal/policy/impl/BurnInProtectionHelper.java b/policy/src/com/android/internal/policy/impl/BurnInProtectionHelper.java
index 4ae9b46..11c739c 100644
--- a/policy/src/com/android/internal/policy/impl/BurnInProtectionHelper.java
+++ b/policy/src/com/android/internal/policy/impl/BurnInProtectionHelper.java
@@ -11,6 +11,7 @@ import android.content.IntentFilter;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManagerInternal;
import android.os.SystemClock;
+import android.util.Slog;
import android.view.Display;
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_MINIMAL_INTERVAL_MS = TimeUnit.SECONDS.toMillis(10);
+ private static final boolean DEBUG = false;
+
private static final String ACTION_BURN_IN_PROTECTION =
"android.internal.policy.action.BURN_IN_PROTECTION";
@@ -61,10 +64,13 @@ public class BurnInProtectionHelper implements DisplayManager.DisplayListener,
private BroadcastReceiver mBurnInProtectionReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
+ if (DEBUG) {
+ Slog.d(TAG, "onReceive " + intent);
+ }
updateBurnInProtection();
}
};
-
+
public BurnInProtectionHelper(Context context, int minHorizontalOffset,
int maxHorizontalOffset, int minVerticalOffset, int maxVerticalOffset,
int maxOffsetRadius) {
@@ -120,12 +126,26 @@ public class BurnInProtectionHelper implements DisplayManager.DisplayListener,
mDisplayManagerInternal.setDisplayOffsets(mDisplay.getDisplayId(),
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.
- long next = SystemClock.elapsedRealtime() + BURNIN_PROTECTION_MINIMAL_INTERVAL_MS;
+ long nextWall = nowWall + BURNIN_PROTECTION_MINIMAL_INTERVAL_MS;
// 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;
- 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 {
mAlarmManager.cancel(mBurnInProtectionIntent);
mCenteringAnimator.start();