Merge "Adds system property for developer option for force-enable burn-in protection" into lmp-mr1-modular-dev

This commit is contained in:
Mark Renouf
2015-03-10 16:38:53 +00:00
committed by Android (Google) Code Review
2 changed files with 57 additions and 20 deletions

View File

@@ -9,8 +9,10 @@ import android.content.IntentFilter;
import android.content.res.Resources;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManagerInternal;
import android.os.Build;
import android.os.Handler;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.util.Log;
import android.view.Display;
@@ -23,7 +25,7 @@ public class BurnInProtectionHelper implements DisplayManager.DisplayListener {
private static final String TAG = "BurnInProtection";
// Default value when max burnin radius is not set.
public static final int BURN_IN_RADIUS_MAX_DEFAULT = -1;
public static final int BURN_IN_MAX_RADIUS_DEFAULT = -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);
@@ -60,23 +62,19 @@ public class BurnInProtectionHelper implements DisplayManager.DisplayListener {
updateBurnInProtection();
}
};
public BurnInProtectionHelper(Context context) {
public BurnInProtectionHelper(Context context, int minHorizontalOffset,
int maxHorizontalOffset, int minVerticalOffset, int maxVerticalOffset,
int maxOffsetRadius) {
final Resources resources = context.getResources();
mMinHorizontalBurnInOffset = resources.getInteger(
com.android.internal.R.integer.config_burnInProtectionMinHorizontalOffset);
mMaxHorizontalBurnInOffset = resources.getInteger(
com.android.internal.R.integer.config_burnInProtectionMaxHorizontalOffset);
mMinVerticalBurnInOffset = resources.getInteger(
com.android.internal.R.integer.config_burnInProtectionMinVerticalOffset);
mMaxVerticalBurnInOffset = resources.getInteger(
com.android.internal.R.integer.config_burnInProtectionMaxVerticalOffset);
int burnInRadiusMax = resources.getInteger(
com.android.internal.R.integer.config_burnInProtectionMaxRadius);
if (burnInRadiusMax != BURN_IN_RADIUS_MAX_DEFAULT) {
mBurnInRadiusMaxSquared = burnInRadiusMax * burnInRadiusMax;
mMinHorizontalBurnInOffset = minHorizontalOffset;
mMaxHorizontalBurnInOffset = maxHorizontalOffset;
mMinVerticalBurnInOffset = minVerticalOffset;
mMaxVerticalBurnInOffset = maxHorizontalOffset;
if (maxOffsetRadius != BURN_IN_MAX_RADIUS_DEFAULT) {
mBurnInRadiusMaxSquared = maxOffsetRadius * maxOffsetRadius;
} else {
mBurnInRadiusMaxSquared = BURN_IN_RADIUS_MAX_DEFAULT;
mBurnInRadiusMaxSquared = BURN_IN_MAX_RADIUS_DEFAULT;
}
mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
@@ -161,7 +159,7 @@ public class BurnInProtectionHelper implements DisplayManager.DisplayListener {
}
}
// If we are outside of the radius, let's try again.
} while (mBurnInRadiusMaxSquared != BURN_IN_RADIUS_MAX_DEFAULT
} while (mBurnInRadiusMaxSquared != BURN_IN_MAX_RADIUS_DEFAULT
&& mLastBurnInXOffset * mLastBurnInXOffset + mLastBurnInYOffset * mLastBurnInYOffset
> mBurnInRadiusMaxSquared);
}

View File

@@ -47,6 +47,7 @@ import android.media.IAudioService;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.media.session.MediaSessionLegacyHelper;
import android.os.Build;
import android.os.Bundle;
import android.os.Debug;
import android.os.FactoryTest;
@@ -91,6 +92,7 @@ import android.view.MotionEvent;
import android.view.Surface;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewRootImpl;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
@@ -1187,6 +1189,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
};
private boolean isRoundWindow() {
return mContext.getResources().getBoolean(com.android.internal.R.bool.config_windowIsRound)
|| (Build.HARDWARE.contains("goldfish")
&& SystemProperties.getBoolean(ViewRootImpl.PROPERTY_EMULATOR_CIRCULAR, false));
}
/** {@inheritDoc} */
@Override
public void init(Context context, IWindowManager windowManager,
@@ -1196,9 +1204,40 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mWindowManagerFuncs = windowManagerFuncs;
mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class);
mDreamManagerInternal = LocalServices.getService(DreamManagerInternal.class);
if (context.getResources().getBoolean(
com.android.internal.R.bool.config_enableBurnInProtection)){
mBurnInProtectionHelper = new BurnInProtectionHelper(context);
// Init display burn-in protection
boolean burnInProtectionEnabled = context.getResources().getBoolean(
com.android.internal.R.bool.config_enableBurnInProtection);
// Allow a system property to override this. Used by developer settings.
boolean burnInProtectionDevMode =
SystemProperties.getBoolean("persist.debug.force_burn_in", false);
if (burnInProtectionEnabled || burnInProtectionDevMode) {
final int minHorizontal;
final int maxHorizontal;
final int minVertical;
final int maxVertical;
final int maxRadius;
if (burnInProtectionDevMode) {
minHorizontal = -8;
maxHorizontal = 8;
minVertical = -8;
maxVertical = -4;
maxRadius = (isRoundWindow()) ? 6 : -1;
} else {
Resources resources = context.getResources();
minHorizontal = resources.getInteger(
com.android.internal.R.integer.config_burnInProtectionMinHorizontalOffset);
maxHorizontal = resources.getInteger(
com.android.internal.R.integer.config_burnInProtectionMaxHorizontalOffset);
minVertical = resources.getInteger(
com.android.internal.R.integer.config_burnInProtectionMinVerticalOffset);
maxVertical = resources.getInteger(
com.android.internal.R.integer.config_burnInProtectionMaxVerticalOffset);
maxRadius = resources.getInteger(
com.android.internal.R.integer.config_burnInProtectionMaxRadius);
}
mBurnInProtectionHelper = new BurnInProtectionHelper(
context, minHorizontal, maxHorizontal, minVertical, maxVertical, maxRadius);
}
mHandler = new PolicyHandler();