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

Commit 4764921d authored by Jorim Jaggi's avatar Jorim Jaggi Committed by Android (Google) Code Review
Browse files

Merge "Only use simple rects for cutout region" into pi-dev

parents 5baaf461 60640518
Loading
Loading
Loading
Loading
+26 −24
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@ import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.RectF;
import android.graphics.Region;
import android.graphics.Region;
import android.graphics.Region.Op;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
import android.text.TextUtils;
import android.text.TextUtils;
@@ -325,14 +326,9 @@ public final class DisplayCutout {
     * @hide
     * @hide
     */
     */
    public static DisplayCutout fromBoundingRect(int left, int top, int right, int bottom) {
    public static DisplayCutout fromBoundingRect(int left, int top, int right, int bottom) {
        Path path = new Path();
        Region r = Region.obtain();
        path.reset();
        r.set(left, top, right, bottom);
        path.moveTo(left, top);
        return fromBounds(r);
        path.lineTo(left, bottom);
        path.lineTo(right, bottom);
        path.lineTo(right, top);
        path.close();
        return fromBounds(path);
    }
    }


    /**
    /**
@@ -340,26 +336,19 @@ public final class DisplayCutout {
     *
     *
     * @hide
     * @hide
     */
     */
    public static DisplayCutout fromBounds(Path path) {
    public static DisplayCutout fromBounds(Region region) {
        RectF clipRect = new RectF();
        return new DisplayCutout(ZERO_RECT, region, false /* copyArguments */);
        path.computeBounds(clipRect, false /* unused */);
        Region clipRegion = Region.obtain();
        clipRegion.set((int) clipRect.left, (int) clipRect.top,
                (int) clipRect.right, (int) clipRect.bottom);

        Region bounds = new Region();
        bounds.setPath(path, clipRegion);
        clipRegion.recycle();
        return new DisplayCutout(ZERO_RECT, bounds, false /* copyArguments */);
    }
    }


    /**
    /**
     * Creates the bounding path according to @android:string/config_mainBuiltInDisplayCutout.
     * Creates the display cutout according to
     * @android:string/config_mainBuiltInDisplayCutoutRectApproximation, which is the closest
     * rectangle-base approximation of the cutout.
     *
     *
     * @hide
     * @hide
     */
     */
    public static DisplayCutout fromResources(Resources res, int displayWidth, int displayHeight) {
    public static DisplayCutout fromResourcesRectApproximation(Resources res, int displayWidth, int displayHeight) {
        return fromSpec(res.getString(R.string.config_mainBuiltInDisplayCutout),
        return fromSpec(res.getString(R.string.config_mainBuiltInDisplayCutoutRectApproximation),
                displayWidth, displayHeight, DENSITY_DEVICE_STABLE / (float) DENSITY_DEFAULT);
                displayWidth, displayHeight, DENSITY_DEVICE_STABLE / (float) DENSITY_DEFAULT);
    }
    }


@@ -369,7 +358,8 @@ public final class DisplayCutout {
     * @hide
     * @hide
     */
     */
    public static Path pathFromResources(Resources res, int displayWidth, int displayHeight) {
    public static Path pathFromResources(Resources res, int displayWidth, int displayHeight) {
        return pathAndDisplayCutoutFromSpec(res.getString(R.string.config_mainBuiltInDisplayCutout),
        return pathAndDisplayCutoutFromSpec(
                res.getString(R.string.config_mainBuiltInDisplayCutout),
                displayWidth, displayHeight, DENSITY_DEVICE_STABLE / (float) DENSITY_DEFAULT).first;
                displayWidth, displayHeight, DENSITY_DEVICE_STABLE / (float) DENSITY_DEFAULT).first;
    }
    }


@@ -417,6 +407,7 @@ public final class DisplayCutout {
        }
        }


        final Path p;
        final Path p;
        final Region r = Region.obtain();
        try {
        try {
            p = PathParser.createPathFromPathData(spec);
            p = PathParser.createPathFromPathData(spec);
        } catch (Throwable e) {
        } catch (Throwable e) {
@@ -431,6 +422,8 @@ public final class DisplayCutout {
        m.postTranslate(offsetX, 0);
        m.postTranslate(offsetX, 0);
        p.transform(m);
        p.transform(m);


        addToRegion(p, r);

        if (bottomSpec != null) {
        if (bottomSpec != null) {
            final Path bottomPath;
            final Path bottomPath;
            try {
            try {
@@ -443,9 +436,10 @@ public final class DisplayCutout {
            m.postTranslate(0, displayHeight);
            m.postTranslate(0, displayHeight);
            bottomPath.transform(m);
            bottomPath.transform(m);
            p.addPath(bottomPath);
            p.addPath(bottomPath);
            addToRegion(bottomPath, r);
        }
        }


        final Pair<Path, DisplayCutout> result = new Pair<>(p, fromBounds(p));
        final Pair<Path, DisplayCutout> result = new Pair<>(p, fromBounds(r));
        synchronized (CACHE_LOCK) {
        synchronized (CACHE_LOCK) {
            sCachedSpec = spec;
            sCachedSpec = spec;
            sCachedDisplayWidth = displayWidth;
            sCachedDisplayWidth = displayWidth;
@@ -456,6 +450,14 @@ public final class DisplayCutout {
        return result;
        return result;
    }
    }


    private static void addToRegion(Path p, Region r) {
        final RectF rectF = new RectF();
        final Rect rect = new Rect();
        p.computeBounds(rectF, false /* unused */);
        rectF.round(rect);
        r.op(rect, Op.UNION);
    }

    private static Region boundingRectsToRegion(List<Rect> rects) {
    private static Region boundingRectsToRegion(List<Rect> rects) {
        Region result = Region.obtain();
        Region result = Region.obtain();
        if (rects != null) {
        if (rects != null) {
+8 −0
Original line number Original line Diff line number Diff line
@@ -2961,6 +2961,14 @@
         -->
         -->
    <string translatable="false" name="config_mainBuiltInDisplayCutout"></string>
    <string translatable="false" name="config_mainBuiltInDisplayCutout"></string>


    <!-- Like config_mainBuiltInDisplayCutout, but this path is used to report the
         one single bounding rect per device edge to the app via
         {@link DisplayCutout#getBoundingRect}. Note that this path should try to match the visual
         appearance of the cutout as much as possible, and may be smaller than
         config_mainBuiltInDisplayCutout
         -->
    <string translatable="false" name="config_mainBuiltInDisplayCutoutRectApproximation">@string/config_mainBuiltInDisplayCutout</string>

    <!-- Whether the display cutout region of the main built-in display should be forced to
    <!-- Whether the display cutout region of the main built-in display should be forced to
         black in software (to avoid aliasing or emulate a cutout that is not physically existent).
         black in software (to avoid aliasing or emulate a cutout that is not physically existent).
         -->
         -->
+1 −0
Original line number Original line Diff line number Diff line
@@ -3338,6 +3338,7 @@


  <java-symbol type="string" name="global_action_logout" />
  <java-symbol type="string" name="global_action_logout" />
  <java-symbol type="string" name="config_mainBuiltInDisplayCutout" />
  <java-symbol type="string" name="config_mainBuiltInDisplayCutout" />
  <java-symbol type="string" name="config_mainBuiltInDisplayCutoutRectApproximation" />
  <java-symbol type="drawable" name="messaging_user" />
  <java-symbol type="drawable" name="messaging_user" />
  <java-symbol type="bool" name="config_fillMainBuiltInDisplayCutout" />
  <java-symbol type="bool" name="config_fillMainBuiltInDisplayCutout" />
  <java-symbol type="drawable" name="ic_logout" />
  <java-symbol type="drawable" name="ic_logout" />
+2 −0
Original line number Original line Diff line number Diff line
@@ -37,6 +37,8 @@
        @right
        @right
    </string>
    </string>


    <string translatable="false" name="config_mainBuiltInDisplayCutoutRectApproximation">@*android:string/config_mainBuiltInDisplayCutout</string>

    <!-- Whether the display cutout region of the main built-in display should be forced to
    <!-- Whether the display cutout region of the main built-in display should be forced to
         black in software (to avoid aliasing or emulate a cutout that is not physically existent).
         black in software (to avoid aliasing or emulate a cutout that is not physically existent).
     -->
     -->
+2 −0
Original line number Original line Diff line number Diff line
@@ -49,6 +49,8 @@
        @dp
        @dp
    </string>
    </string>


    <string translatable="false" name="config_mainBuiltInDisplayCutoutRectApproximation">@*android:string/config_mainBuiltInDisplayCutout</string>

    <!-- Whether the display cutout region of the main built-in display should be forced to
    <!-- Whether the display cutout region of the main built-in display should be forced to
         black in software (to avoid aliasing or emulate a cutout that is not physically existent).
         black in software (to avoid aliasing or emulate a cutout that is not physically existent).
     -->
     -->
Loading