Remove usage of getInternalDisplayToken for DisplayPrimaries

Instead calling to DisplayManagerInternal to get the DisplayPrimaries
for a particular displayId.

Test: DisplayWhiteBalanceTintControllerTest
Bug: 242714168
Change-Id: Ifc5ecc60937d186c0c94858ffc543d36df8f2d07
This commit is contained in:
Chavi Weingarten
2022-09-20 20:45:11 +00:00
parent 5473b217d7
commit fd5609c856
6 changed files with 58 additions and 23 deletions

View File

@@ -28,6 +28,7 @@ import android.util.Slog;
import android.util.SparseArray;
import android.view.Display;
import android.view.DisplayInfo;
import android.view.SurfaceControl;
import android.view.SurfaceControl.Transaction;
import android.window.DisplayWindowPolicyController;
import android.window.ScreenCapture;
@@ -397,6 +398,11 @@ public abstract class DisplayManagerInternal {
*/
public abstract DisplayWindowPolicyController getDisplayWindowPolicyController(int displayId);
/**
* Get DisplayPrimaries from SF for a particular display.
*/
public abstract SurfaceControl.DisplayPrimaries getDisplayNativePrimaries(int displayId);
/**
* Describes the requested power state of the display.
*

View File

@@ -3884,6 +3884,19 @@ public final class DisplayManagerService extends SystemService {
return displayIdToMirror;
}
}
@Override
public SurfaceControl.DisplayPrimaries getDisplayNativePrimaries(int displayId) {
IBinder displayToken;
synchronized (mSyncRoot) {
displayToken = getDisplayToken(displayId);
if (displayToken == null) {
throw new IllegalArgumentException("Invalid displayId=" + displayId);
}
}
return SurfaceControl.getDisplayNativePrimaries(displayToken);
}
}
class DesiredDisplayModeSpecsObserver

View File

@@ -50,6 +50,7 @@ import android.database.ContentObserver;
import android.hardware.display.ColorDisplayManager;
import android.hardware.display.ColorDisplayManager.AutoMode;
import android.hardware.display.ColorDisplayManager.ColorMode;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.display.IColorDisplayManager;
import android.hardware.display.Time;
import android.net.Uri;
@@ -154,7 +155,8 @@ public final class ColorDisplayService extends SystemService {
@VisibleForTesting
final DisplayWhiteBalanceTintController mDisplayWhiteBalanceTintController =
new DisplayWhiteBalanceTintController();
new DisplayWhiteBalanceTintController(
LocalServices.getService(DisplayManagerInternal.class));
private final NightDisplayTintController mNightDisplayTintController =
new NightDisplayTintController();
private final TintController mGlobalSaturationTintController =

View File

@@ -16,6 +16,8 @@
package com.android.server.display.color;
import static android.view.Display.DEFAULT_DISPLAY;
import static com.android.server.display.color.DisplayTransformManager.LEVEL_COLOR_MATRIX_DISPLAY_WHITE_BALANCE;
import android.annotation.NonNull;
@@ -24,10 +26,9 @@ import android.content.Context;
import android.content.res.Resources;
import android.graphics.ColorSpace;
import android.hardware.display.ColorDisplayManager;
import android.hardware.display.DisplayManagerInternal;
import android.opengl.Matrix;
import android.os.IBinder;
import android.util.Slog;
import android.view.SurfaceControl;
import android.view.SurfaceControl.DisplayPrimaries;
import com.android.internal.R;
@@ -64,6 +65,12 @@ final class DisplayWhiteBalanceTintController extends TintController {
// This feature becomes disallowed if the device is in an unsupported strong/light state.
private boolean mIsAllowed = true;
private final DisplayManagerInternal mDisplayManagerInternal;
DisplayWhiteBalanceTintController(DisplayManagerInternal dm) {
mDisplayManagerInternal = dm;
}
@Override
public void setUp(Context context, boolean needsLinear) {
mSetUp = false;
@@ -287,12 +294,8 @@ final class DisplayWhiteBalanceTintController extends TintController {
}
private ColorSpace.Rgb getDisplayColorSpaceFromSurfaceControl() {
final IBinder displayToken = SurfaceControl.getInternalDisplayToken();
if (displayToken == null) {
return null;
}
DisplayPrimaries primaries = SurfaceControl.getDisplayNativePrimaries(displayToken);
DisplayPrimaries primaries =
mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY);
if (primaries == null || primaries.red == null || primaries.green == null
|| primaries.blue == null || primaries.white == null) {
return null;

View File

@@ -16,14 +16,18 @@
package com.android.server.display.color;
import static android.view.Display.DEFAULT_DISPLAY;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.junit.Assert.assertArrayEquals;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.res.Resources;
import android.hardware.display.DisplayManagerInternal;
import android.os.Binder;
import android.os.IBinder;
import android.view.SurfaceControl;
@@ -50,6 +54,8 @@ public class DisplayWhiteBalanceTintControllerTest {
private Context mMockedContext;
@Mock
private Resources mMockedResources;
@Mock
private DisplayManagerInternal mDisplayManagerInternal;
private MockitoSession mSession;
private Resources mResources;
@@ -81,7 +87,6 @@ public class DisplayWhiteBalanceTintControllerTest {
doReturn(mMockedResources).when(mMockedContext).getResources();
mDisplayToken = new Binder();
doReturn(mDisplayToken).when(() -> SurfaceControl.getInternalDisplayToken());
}
@After
@@ -114,8 +119,8 @@ public class DisplayWhiteBalanceTintControllerTest {
displayPrimaries.white.X = 0.950456f;
displayPrimaries.white.Y = 1.000000f;
displayPrimaries.white.Z = 1.089058f;
doReturn(displayPrimaries)
.when(() -> SurfaceControl.getDisplayNativePrimaries(mDisplayToken));
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY))
.thenReturn(displayPrimaries);
setUpTintController();
assertWithMessage("Setup with valid SurfaceControl failed")
@@ -134,8 +139,8 @@ public class DisplayWhiteBalanceTintControllerTest {
displayPrimaries.green = new CieXyz();
displayPrimaries.blue = new CieXyz();
displayPrimaries.white = new CieXyz();
doReturn(displayPrimaries)
.when(() -> SurfaceControl.getDisplayNativePrimaries(mDisplayToken));
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY))
.thenReturn(displayPrimaries);
setUpTintController();
assertWithMessage("Setup with invalid SurfaceControl succeeded")
@@ -154,7 +159,7 @@ public class DisplayWhiteBalanceTintControllerTest {
.when(mMockedResources)
.getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries);
// Make SurfaceControl setup fail
doReturn(null).when(() -> SurfaceControl.getDisplayNativePrimaries(mDisplayToken));
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)).thenReturn(null);
setUpTintController();
assertWithMessage("Setup with valid Resources failed")
@@ -178,7 +183,7 @@ public class DisplayWhiteBalanceTintControllerTest {
.when(mMockedResources)
.getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries);
// Make SurfaceControl setup fail
doReturn(null).when(() -> SurfaceControl.getDisplayNativePrimaries(mDisplayToken));
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)).thenReturn(null);
setUpTintController();
assertWithMessage("Setup with invalid Resources succeeded")
@@ -208,8 +213,8 @@ public class DisplayWhiteBalanceTintControllerTest {
displayPrimaries.white.X = 0.950456f;
displayPrimaries.white.Y = 1.000000f;
displayPrimaries.white.Z = 1.089058f;
doReturn(displayPrimaries)
.when(() -> SurfaceControl.getDisplayNativePrimaries(mDisplayToken));
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY))
.thenReturn(displayPrimaries);
setUpTintController();
assertWithMessage("Setup with valid SurfaceControl failed")
@@ -234,7 +239,8 @@ public class DisplayWhiteBalanceTintControllerTest {
}
private void setUpTintController() {
mDisplayWhiteBalanceTintController = new DisplayWhiteBalanceTintController();
mDisplayWhiteBalanceTintController = new DisplayWhiteBalanceTintController(
mDisplayManagerInternal);
mDisplayWhiteBalanceTintController.setUp(mMockedContext, true);
mDisplayWhiteBalanceTintController.setActivated(true);
}

View File

@@ -18,21 +18,26 @@ package com.android.server.display.color;
import static com.google.common.truth.Truth.assertWithMessage;
import androidx.test.InstrumentationRegistry;
import static org.mockito.Mockito.mock;
import java.lang.System;
import java.util.Arrays;
import android.hardware.display.DisplayManagerInternal;
import androidx.test.InstrumentationRegistry;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
public class DisplayWhiteBalanceTintControllerTest {
private DisplayWhiteBalanceTintController mDisplayWhiteBalanceTintController;
@Before
public void setUp() {
mDisplayWhiteBalanceTintController = new DisplayWhiteBalanceTintController();
DisplayManagerInternal displayManagerInternal = mock(DisplayManagerInternal.class);
mDisplayWhiteBalanceTintController =
new DisplayWhiteBalanceTintController(displayManagerInternal);
mDisplayWhiteBalanceTintController.setUp(InstrumentationRegistry.getContext(), true);
mDisplayWhiteBalanceTintController.setActivated(true);
}