Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b82a60c authored by Arpit Singh's avatar Arpit Singh
Browse files

Add xDpi and yDpi to DisplayViewport

This change adds and populates xDpi and yDpi fields to the
DisplayViewport from DisplayDeviceInfo.

Corresponding JNI layer is updated to read these new values and
propogate to the native input code.

Test: check dumpsys input
Bug: 432649760
Flag: com.android.input.flags.use_separate_xy_dpi_scaling_for_mice
Change-Id: I0f5104e6a80c894907c294ebdef96c8d025aa09e
parent 14a1f944
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -84,6 +84,12 @@ public final class DisplayViewport {
    // The logical display density which is the basis for density-independent pixels.
    public int densityDpi;

    // The physical density of the display in DPI in the X direction.
    public float xDpi;

    // The physical density of the display in DPI in the Y direction.
    public float yDpi;

    public void copyFrom(DisplayViewport viewport) {
        valid = viewport.valid;
        isActive = viewport.isActive;
@@ -97,6 +103,8 @@ public final class DisplayViewport {
        physicalPort = viewport.physicalPort;
        type = viewport.type;
        densityDpi = viewport.densityDpi;
        xDpi = viewport.xDpi;
        yDpi = viewport.yDpi;
    }

    /**
@@ -130,7 +138,9 @@ public final class DisplayViewport {
              && TextUtils.equals(uniqueId, other.uniqueId)
              && Objects.equals(physicalPort, other.physicalPort)
              && type == other.type
              && densityDpi == other.densityDpi;
              && densityDpi == other.densityDpi
              && xDpi == other.xDpi
              && yDpi == other.yDpi;
    }

    @Override
@@ -151,6 +161,8 @@ public final class DisplayViewport {
        }
        result += prime * result + type;
        result += prime * result + densityDpi;
        result += prime * result + xDpi;
        result += prime * result + yDpi;
        return result;
    }

@@ -165,6 +177,8 @@ public final class DisplayViewport {
                + ", physicalPort=" + physicalPort
                + ", orientation=" + orientation
                + ", densityDpi=" + densityDpi
                + ", xDpi=" + xDpi
                + ", yDpi=" + yDpi
                + ", logicalFrame=" + logicalFrame
                + ", physicalFrame=" + physicalFrame
                + ", deviceWidth=" + deviceWidth
+8 −0
Original line number Diff line number Diff line
@@ -44,6 +44,8 @@ static struct {
    jfieldID physicalPort;
    jfieldID type;
    jfieldID densityDpi;
    jfieldID xDpi;
    jfieldID yDpi;
} gDisplayViewportClassInfo;

static struct {
@@ -84,6 +86,8 @@ status_t android_hardware_display_DisplayViewport_toNative(JNIEnv* env, jobject
                gDisplayViewportClassInfo.type));

    viewport->densityDpi = env->GetIntField(viewportObj, gDisplayViewportClassInfo.densityDpi);
    viewport->xDpi = env->GetFloatField(viewportObj, gDisplayViewportClassInfo.xDpi);
    viewport->yDpi = env->GetFloatField(viewportObj, gDisplayViewportClassInfo.yDpi);

    jobject logicalFrameObj =
            env->GetObjectField(viewportObj, gDisplayViewportClassInfo.logicalFrame);
@@ -140,6 +144,10 @@ int register_android_hardware_display_DisplayViewport(JNIEnv* env) {

    gDisplayViewportClassInfo.densityDpi =
            GetFieldIDOrDie(env, gDisplayViewportClassInfo.clazz, "densityDpi", "I");
    gDisplayViewportClassInfo.xDpi =
            GetFieldIDOrDie(env, gDisplayViewportClassInfo.clazz, "xDpi", "F");
    gDisplayViewportClassInfo.yDpi =
            GetFieldIDOrDie(env, gDisplayViewportClassInfo.clazz, "yDpi", "F");

    clazz = FindClassOrDie(env, "android/graphics/Rect");
    gRectClassInfo.left = GetFieldIDOrDie(env, clazz, "left", "I");
+2 −0
Original line number Diff line number Diff line
@@ -3620,6 +3620,8 @@ public final class DisplayManagerService extends SystemService {
        viewport.displayId = displayId;
        viewport.isActive = Display.isActiveState(info.state);
        viewport.densityDpi = info.densityDpi;
        viewport.xDpi = info.xDpi;
        viewport.yDpi = info.yDpi;
    }

    private void updateViewportPowerStateLocked(LogicalDisplay display) {