Hide display white balance setting depending on color mode

Display white balance relies on a linear color transform matrix to work
as intended. When the current color mode is COLOR_MODE_SATURATED, this
condition is not guaranteed to be satisfied. In this case, hide the
display white balance setting.

Bug: 116516917

make ROBOTEST_FILTER=DisplayWhiteBalancePreferenceControllerTest
RunSettingsRoboTests -j32

Change-Id: I1fe1eb907485766888832db8b9c342339cc80ea7
This commit is contained in:
Daniel Solomon
2019-01-05 15:56:30 -08:00
parent 0057e45e6f
commit 60418b4de8
2 changed files with 43 additions and 2 deletions

View File

@@ -17,9 +17,11 @@ import android.content.Context;
import android.hardware.display.ColorDisplayManager;
import android.os.UserHandle;
import android.provider.Settings.Secure;
import com.android.internal.app.ColorDisplayController;
import com.android.settings.core.TogglePreferenceController;
public class DisplayWhiteBalancePreferenceController extends TogglePreferenceController {
private ColorDisplayController mColorDisplayController;
public DisplayWhiteBalancePreferenceController(Context context, String key) {
super(context, key);
@@ -27,7 +29,11 @@ public class DisplayWhiteBalancePreferenceController extends TogglePreferenceCon
@Override
public int getAvailabilityStatus() {
return ColorDisplayManager.isDisplayWhiteBalanceAvailable(mContext) ?
// Display white balance is only valid in linear light space. COLOR_MODE_SATURATED implies
// unmanaged color mode, and hence unknown color processing conditions.
return ColorDisplayManager.isDisplayWhiteBalanceAvailable(mContext) &&
getColorDisplayController().getColorMode() !=
ColorDisplayController.COLOR_MODE_SATURATED ?
AVAILABLE : DISABLED_FOR_USER;
}
@@ -43,4 +49,11 @@ public class DisplayWhiteBalancePreferenceController extends TogglePreferenceCon
isChecked ? 1 : 0, UserHandle.USER_CURRENT);
return true;
}
ColorDisplayController getColorDisplayController() {
if (mColorDisplayController == null) {
mColorDisplayController = new ColorDisplayController(mContext);
}
return mColorDisplayController;
}
}