Merge "Add availability query method to TintController"
This commit is contained in:
committed by
Android (Google) Code Review
commit
d6e5916024
@@ -23,6 +23,7 @@ import static android.hardware.display.ColorDisplayManager.COLOR_MODE_AUTOMATIC;
|
||||
import static android.hardware.display.ColorDisplayManager.COLOR_MODE_BOOSTED;
|
||||
import static android.hardware.display.ColorDisplayManager.COLOR_MODE_NATURAL;
|
||||
import static android.hardware.display.ColorDisplayManager.COLOR_MODE_SATURATED;
|
||||
|
||||
import static com.android.server.display.DisplayTransformManager.LEVEL_COLOR_MATRIX_DISPLAY_WHITE_BALANCE;
|
||||
import static com.android.server.display.DisplayTransformManager.LEVEL_COLOR_MATRIX_NIGHT_DISPLAY;
|
||||
import static com.android.server.display.DisplayTransformManager.LEVEL_COLOR_MATRIX_SATURATION;
|
||||
@@ -65,10 +66,9 @@ import android.provider.Settings.System;
|
||||
import android.util.MathUtils;
|
||||
import android.util.Slog;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.SurfaceControl.DisplayPrimaries;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.SurfaceControl.DisplayPrimaries;
|
||||
|
||||
import com.android.internal.R;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
@@ -79,6 +79,7 @@ import com.android.server.SystemService;
|
||||
import com.android.server.twilight.TwilightListener;
|
||||
import com.android.server.twilight.TwilightManager;
|
||||
import com.android.server.twilight.TwilightState;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
import java.lang.ref.WeakReference;
|
||||
@@ -145,6 +146,7 @@ public final class ColorDisplayService extends SystemService {
|
||||
private float[] mCurrentColorTemperatureXYZ;
|
||||
private boolean mSetUp = false;
|
||||
private float[] mMatrixDisplayWhiteBalance = new float[16];
|
||||
private Boolean mIsAvailable;
|
||||
|
||||
@Override
|
||||
public void setUp(Context context, boolean needsLinear) {
|
||||
@@ -255,6 +257,14 @@ public final class ColorDisplayService extends SystemService {
|
||||
return LEVEL_COLOR_MATRIX_DISPLAY_WHITE_BALANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(Context context) {
|
||||
if (mIsAvailable == null) {
|
||||
mIsAvailable = ColorDisplayManager.isDisplayWhiteBalanceAvailable(context);
|
||||
}
|
||||
return mIsAvailable;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a given matrix into a string.
|
||||
*
|
||||
@@ -280,9 +290,7 @@ public final class ColorDisplayService extends SystemService {
|
||||
@Override
|
||||
public void dump(PrintWriter pw) {
|
||||
synchronized (mLock) {
|
||||
pw.println("ColorDisplayService");
|
||||
pw.println(" mSetUp = " + mSetUp);
|
||||
|
||||
if (!mSetUp) {
|
||||
return;
|
||||
}
|
||||
@@ -402,6 +410,11 @@ public final class ColorDisplayService extends SystemService {
|
||||
public int getLevel() {
|
||||
return LEVEL_COLOR_MATRIX_SATURATION;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(Context context) {
|
||||
return ColorDisplayManager.isColorTransformAccelerated(context);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -623,7 +636,7 @@ public final class ColorDisplayService extends SystemService {
|
||||
// existing activated state. This ensures consistency of tint across the color mode change.
|
||||
onDisplayColorModeChanged(mNightDisplayController.getColorMode());
|
||||
|
||||
if (ColorDisplayManager.isNightDisplayAvailable(getContext())) {
|
||||
if (mNightDisplayTintController.isAvailable(getContext())) {
|
||||
// Reset the activated state.
|
||||
mNightDisplayTintController.setActivated(null);
|
||||
|
||||
@@ -641,7 +654,7 @@ public final class ColorDisplayService extends SystemService {
|
||||
}
|
||||
}
|
||||
|
||||
if (ColorDisplayManager.isDisplayWhiteBalanceAvailable(getContext())) {
|
||||
if (mDisplayWhiteBalanceTintController.isAvailable(getContext())) {
|
||||
// Prepare the display white balance transform matrix.
|
||||
mDisplayWhiteBalanceTintController.setUp(getContext(), true /* needsLinear */);
|
||||
|
||||
@@ -658,7 +671,7 @@ public final class ColorDisplayService extends SystemService {
|
||||
mNightDisplayController = null;
|
||||
}
|
||||
|
||||
if (ColorDisplayManager.isNightDisplayAvailable(getContext())) {
|
||||
if (mNightDisplayTintController.isAvailable(getContext())) {
|
||||
if (mNightDisplayAutoMode != null) {
|
||||
mNightDisplayAutoMode.onStop();
|
||||
mNightDisplayAutoMode = null;
|
||||
@@ -666,7 +679,7 @@ public final class ColorDisplayService extends SystemService {
|
||||
mNightDisplayTintController.endAnimator();
|
||||
}
|
||||
|
||||
if (ColorDisplayManager.isDisplayWhiteBalanceAvailable(getContext())) {
|
||||
if (mDisplayWhiteBalanceTintController.isAvailable(getContext())) {
|
||||
mDisplayWhiteBalanceTintController.endAnimator();
|
||||
}
|
||||
}
|
||||
@@ -714,9 +727,11 @@ public final class ColorDisplayService extends SystemService {
|
||||
mNightDisplayTintController.cancelAnimator();
|
||||
mDisplayWhiteBalanceTintController.cancelAnimator();
|
||||
|
||||
mNightDisplayTintController
|
||||
.setUp(getContext(), DisplayTransformManager.needsLinearColorMatrix(mode));
|
||||
mNightDisplayTintController.setMatrix(getNightDisplayColorTemperatureSetting());
|
||||
if (mNightDisplayTintController.isAvailable(getContext())) {
|
||||
mNightDisplayTintController
|
||||
.setUp(getContext(), DisplayTransformManager.needsLinearColorMatrix(mode));
|
||||
mNightDisplayTintController.setMatrix(getNightDisplayColorTemperatureSetting());
|
||||
}
|
||||
|
||||
updateDisplayWhiteBalanceStatus();
|
||||
|
||||
@@ -1064,13 +1079,32 @@ public final class ColorDisplayService extends SystemService {
|
||||
|
||||
private void dumpInternal(PrintWriter pw) {
|
||||
pw.println("COLOR DISPLAY MANAGER dumpsys (color_display)");
|
||||
|
||||
pw.println("Night Display:");
|
||||
if (ColorDisplayManager.isNightDisplayAvailable(getContext())) {
|
||||
if (mNightDisplayTintController.isAvailable(getContext())) {
|
||||
pw.println(" Activated: " + mNightDisplayTintController.isActivated());
|
||||
pw.println(" Color temp: " + mNightDisplayTintController.getColorTemperature());
|
||||
} else {
|
||||
pw.println(" Not available");
|
||||
}
|
||||
|
||||
pw.println("Global saturation:");
|
||||
if (mGlobalSaturationTintController.isAvailable(getContext())) {
|
||||
pw.println(" Activated: " + mGlobalSaturationTintController.isActivated());
|
||||
} else {
|
||||
pw.println(" Not available");
|
||||
}
|
||||
|
||||
mAppSaturationController.dump(pw);
|
||||
|
||||
pw.println("Display white balance:");
|
||||
if (mDisplayWhiteBalanceTintController.isAvailable(getContext())) {
|
||||
pw.println(" Activated: " + mDisplayWhiteBalanceTintController.isActivated());
|
||||
} else {
|
||||
pw.println(" Not available");
|
||||
}
|
||||
|
||||
pw.println("Color mode: " + getColorModeInternal());
|
||||
}
|
||||
|
||||
private boolean isNightDisplayActivatedSetting() {
|
||||
@@ -1368,12 +1402,19 @@ public final class ColorDisplayService extends SystemService {
|
||||
* Get the color transform level to apply the matrix.
|
||||
*/
|
||||
public abstract int getLevel();
|
||||
|
||||
/**
|
||||
* Returns whether or not this transform type is available on this device.
|
||||
*/
|
||||
public abstract boolean isAvailable(Context context);
|
||||
}
|
||||
|
||||
private final class NightDisplayTintController extends TintController {
|
||||
|
||||
private float[] mMatrix = new float[16];
|
||||
private final float[] mMatrix = new float[16];
|
||||
private final float[] mColorTempCoefficients = new float[9];
|
||||
|
||||
private Boolean mIsAvailable;
|
||||
private Integer mColorTemp;
|
||||
|
||||
/**
|
||||
@@ -1446,13 +1487,21 @@ public final class ColorDisplayService extends SystemService {
|
||||
return LEVEL_COLOR_MATRIX_NIGHT_DISPLAY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(Context context) {
|
||||
if (mIsAvailable == null) {
|
||||
mIsAvailable = ColorDisplayManager.isNightDisplayAvailable(context);
|
||||
}
|
||||
return mIsAvailable;
|
||||
}
|
||||
|
||||
void onActivated(boolean activated) {
|
||||
Slog.i(TAG, activated ? "Turning on night display" : "Turning off night display");
|
||||
if (mNightDisplayAutoMode != null) {
|
||||
mNightDisplayAutoMode.onActivated(activated);
|
||||
}
|
||||
|
||||
if (ColorDisplayManager.isDisplayWhiteBalanceAvailable(getContext())) {
|
||||
if (mDisplayWhiteBalanceTintController.isAvailable(getContext())) {
|
||||
updateDisplayWhiteBalanceStatus();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user