Replace Outline#setConvexPath with Outline#setPath

Bug: 148544953
Test: No change in behavior, no new tests

setConvexPath no longer requires that the Path be Convex, so deprecate
the method and replace it with a name that does not imply it must be
Convex.

Update internal references to the Path being Convex as well.

Change-Id: I8935dc8ac7f7fb7db0d667e35fda67afdf2e6ac8
diff --git a/api/current.txt b/api/current.txt
index 1306bfa..d98eced 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -14852,10 +14852,11 @@
     method public void offset(int, int);
     method public void set(@NonNull android.graphics.Outline);
     method public void setAlpha(@FloatRange(from=0.0, to=1.0) float);
-    method public void setConvexPath(@NonNull android.graphics.Path);
+    method @Deprecated public void setConvexPath(@NonNull android.graphics.Path);
     method public void setEmpty();
     method public void setOval(int, int, int, int);
     method public void setOval(@NonNull android.graphics.Rect);
+    method public void setPath(@NonNull android.graphics.Path);
     method public void setRect(int, int, int, int);
     method public void setRect(@NonNull android.graphics.Rect);
     method public void setRoundRect(int, int, int, int, float);
diff --git a/core/jni/android_view_RenderNode.cpp b/core/jni/android_view_RenderNode.cpp
index 538861e..a8246c7 100644
--- a/core/jni/android_view_RenderNode.cpp
+++ b/core/jni/android_view_RenderNode.cpp
@@ -151,11 +151,11 @@
     return true;
 }
 
-static jboolean android_view_RenderNode_setOutlineConvexPath(CRITICAL_JNI_PARAMS_COMMA jlong renderNodePtr,
+static jboolean android_view_RenderNode_setOutlinePath(CRITICAL_JNI_PARAMS_COMMA jlong renderNodePtr,
         jlong outlinePathPtr, jfloat alpha) {
     RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
     SkPath* outlinePath = reinterpret_cast<SkPath*>(outlinePathPtr);
-    renderNode->mutateStagingProperties().mutableOutline().setConvexPath(outlinePath, alpha);
+    renderNode->mutateStagingProperties().mutableOutline().setPath(outlinePath, alpha);
     renderNode->setPropertyFieldsDirty(RenderNode::GENERIC);
     return true;
 }
@@ -684,7 +684,7 @@
     { "nSetProjectionReceiver","(JZ)Z",  (void*) android_view_RenderNode_setProjectionReceiver },
 
     { "nSetOutlineRoundRect",  "(JIIIIFF)Z", (void*) android_view_RenderNode_setOutlineRoundRect },
-    { "nSetOutlineConvexPath", "(JJF)Z", (void*) android_view_RenderNode_setOutlineConvexPath },
+    { "nSetOutlinePath",       "(JJF)Z", (void*) android_view_RenderNode_setOutlinePath },
     { "nSetOutlineEmpty",      "(J)Z",   (void*) android_view_RenderNode_setOutlineEmpty },
     { "nSetOutlineNone",       "(J)Z",   (void*) android_view_RenderNode_setOutlineNone },
     { "nHasShadow",            "(J)Z",   (void*) android_view_RenderNode_hasShadow },
diff --git a/graphics/java/android/graphics/Outline.java b/graphics/java/android/graphics/Outline.java
index 91a60c3..c12159c 100644
--- a/graphics/java/android/graphics/Outline.java
+++ b/graphics/java/android/graphics/Outline.java
@@ -43,7 +43,7 @@
     /** @hide */
     public static final int MODE_ROUND_RECT = 1;
     /** @hide */
-    public static final int MODE_CONVEX_PATH = 2;
+    public static final int MODE_PATH = 2;
 
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
@@ -51,7 +51,7 @@
             value = {
                     MODE_EMPTY,
                     MODE_ROUND_RECT,
-                    MODE_CONVEX_PATH,
+                    MODE_PATH,
             })
     public @interface Mode {}
 
@@ -60,7 +60,7 @@
     public int mMode = MODE_EMPTY;
 
     /**
-     * Only guaranteed to be non-null when mode == MODE_CONVEX_PATH
+     * Only guaranteed to be non-null when mode == MODE_PATH
      *
      * @hide
      */
@@ -124,7 +124,7 @@
      * @see android.view.View#setClipToOutline(boolean)
      */
     public boolean canClip() {
-        return mMode != MODE_CONVEX_PATH;
+        return mMode != MODE_PATH;
     }
 
     /**
@@ -157,7 +157,7 @@
      */
     public void set(@NonNull Outline src) {
         mMode = src.mMode;
-        if (src.mMode == MODE_CONVEX_PATH) {
+        if (src.mMode == MODE_PATH) {
             if (mPath == null) {
                 mPath = new Path();
             }
@@ -194,7 +194,7 @@
             return;
         }
 
-        if (mMode == MODE_CONVEX_PATH) {
+        if (mMode == MODE_PATH) {
             // rewind here to avoid thrashing the allocations, but could alternately clear ref
             mPath.rewind();
         }
@@ -213,7 +213,7 @@
     /**
      * Populates {@code outBounds} with the outline bounds, if set, and returns
      * {@code true}. If no outline bounds are set, or if a path has been set
-     * via {@link #setConvexPath(Path)}, returns {@code false}.
+     * via {@link #setPath(Path)}, returns {@code false}.
      *
      * @param outRect the rect to populate with the outline bounds, if set
      * @return {@code true} if {@code outBounds} was populated with outline
@@ -229,7 +229,7 @@
 
     /**
      * Returns the rounded rect radius, if set, or a value less than 0 if a path has
-     * been set via {@link #setConvexPath(Path)}. A return value of {@code 0}
+     * been set via {@link #setPath(Path)}. A return value of {@code 0}
      * indicates a non-rounded rect.
      *
      * @return the rounded rect radius, or value < 0
@@ -259,7 +259,7 @@
             mPath.rewind();
         }
 
-        mMode = MODE_CONVEX_PATH;
+        mMode = MODE_PATH;
         mPath.addOval(left, top, right, bottom, Path.Direction.CW);
         mRect.setEmpty();
         mRadius = RADIUS_UNDEFINED;
@@ -279,9 +279,21 @@
      * @param convexPath used to construct the Outline. As of
      * {@link android.os.Build.VERSION_CODES#Q}, it is no longer required to be
      * convex.
+     *
+     * @deprecated The path is no longer required to be convex. Use {@link #setPath} instead.
      */
+    @Deprecated
     public void setConvexPath(@NonNull Path convexPath) {
-        if (convexPath.isEmpty()) {
+        setPath(convexPath);
+    }
+
+    /**
+     * Sets the Outline to a {@link android.graphics.Path path}.
+     *
+     * @param path used to construct the Outline.
+     */
+    public void setPath(@NonNull Path path) {
+        if (path.isEmpty()) {
             setEmpty();
             return;
         }
@@ -290,8 +302,8 @@
             mPath = new Path();
         }
 
-        mMode = MODE_CONVEX_PATH;
-        mPath.set(convexPath);
+        mMode = MODE_PATH;
+        mPath.set(path);
         mRect.setEmpty();
         mRadius = RADIUS_UNDEFINED;
     }
@@ -302,7 +314,7 @@
     public void offset(int dx, int dy) {
         if (mMode == MODE_ROUND_RECT) {
             mRect.offset(dx, dy);
-        } else if (mMode == MODE_CONVEX_PATH) {
+        } else if (mMode == MODE_PATH) {
             mPath.offset(dx, dy);
         }
     }
diff --git a/graphics/java/android/graphics/RenderNode.java b/graphics/java/android/graphics/RenderNode.java
index 17e3b44..3835b2d 100644
--- a/graphics/java/android/graphics/RenderNode.java
+++ b/graphics/java/android/graphics/RenderNode.java
@@ -687,8 +687,8 @@
                         outline.mRect.left, outline.mRect.top,
                         outline.mRect.right, outline.mRect.bottom,
                         outline.mRadius, outline.mAlpha);
-            case Outline.MODE_CONVEX_PATH:
-                return nSetOutlineConvexPath(mNativeRenderNode, outline.mPath.mNativePath,
+            case Outline.MODE_PATH:
+                return nSetOutlinePath(mNativeRenderNode, outline.mPath.mNativePath,
                         outline.mAlpha);
         }
 
@@ -1620,7 +1620,7 @@
             int right, int bottom, float radius, float alpha);
 
     @CriticalNative
-    private static native boolean nSetOutlineConvexPath(long renderNode, long nativePath,
+    private static native boolean nSetOutlinePath(long renderNode, long nativePath,
             float alpha);
 
     @CriticalNative
diff --git a/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java b/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
index 928e607..746378e 100644
--- a/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
+++ b/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
@@ -387,7 +387,7 @@
 
     @Override
     public void getOutline(@NonNull Outline outline) {
-        outline.setConvexPath(mMask);
+        outline.setPath(mMask);
     }
 
     /** @hide */
diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java
index 3881955..f053f39 100644
--- a/graphics/java/android/graphics/drawable/GradientDrawable.java
+++ b/graphics/java/android/graphics/drawable/GradientDrawable.java
@@ -1915,7 +1915,7 @@
             case RECTANGLE:
                 if (st.mRadiusArray != null) {
                     buildPathIfDirty();
-                    outline.setConvexPath(mPath);
+                    outline.setPath(mPath);
                     return;
                 }
 
diff --git a/graphics/java/android/graphics/drawable/shapes/RoundRectShape.java b/graphics/java/android/graphics/drawable/shapes/RoundRectShape.java
index 475e0bb..28ba605 100644
--- a/graphics/java/android/graphics/drawable/shapes/RoundRectShape.java
+++ b/graphics/java/android/graphics/drawable/shapes/RoundRectShape.java
@@ -94,7 +94,7 @@
             for (int i = 1; i < 8; i++) {
                 if (mOuterRadii[i] != radius) {
                     // can't call simple constructors, use path
-                    outline.setConvexPath(mPath);
+                    outline.setPath(mPath);
                     return;
                 }
             }
diff --git a/libs/hwui/Outline.h b/libs/hwui/Outline.h
index f1c3803..2eb2c7c 100644
--- a/libs/hwui/Outline.h
+++ b/libs/hwui/Outline.h
@@ -26,7 +26,7 @@
 
 class Outline {
 public:
-    enum class Type { None = 0, Empty = 1, ConvexPath = 2, RoundRect = 3 };
+    enum class Type { None = 0, Empty = 1, Path = 2, RoundRect = 3 };
 
     Outline() : mShouldClip(false), mType(Type::None), mRadius(0), mAlpha(0.0f) {}
 
@@ -57,12 +57,12 @@
         }
     }
 
-    void setConvexPath(const SkPath* outline, float alpha) {
+    void setPath(const SkPath* outline, float alpha) {
         if (!outline) {
             setEmpty();
             return;
         }
-        mType = Type::ConvexPath;
+        mType = Type::Path;
         mPath = *outline;
         mBounds.set(outline->getBounds());
         mAlpha = alpha;
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleFlyoutView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleFlyoutView.java
index 4194352..5b9ea7d 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleFlyoutView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleFlyoutView.java
@@ -431,7 +431,7 @@
             final float interpolatedRadius = getInterpolatedRadius();
             rectPath.addRoundRect(mBgRect, interpolatedRadius,
                     interpolatedRadius, Path.Direction.CW);
-            outline.setConvexPath(rectPath);
+            outline.setPath(rectPath);
 
             // Get rid of the triangle path once it has disappeared behind the flyout.
             if (mPercentStillFlyout > 0.5f) {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/TriangleShape.java b/packages/SystemUI/src/com/android/systemui/recents/TriangleShape.java
index de8e6ea..7ebebaa 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/TriangleShape.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/TriangleShape.java
@@ -70,6 +70,6 @@
 
     @Override
     public void getOutline(@NonNull Outline outline) {
-        outline.setConvexPath(mTriangularPath);
+        outline.setPath(mTriangularPath);
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java
index 28f4136..049cafa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java
@@ -93,7 +93,7 @@
             } else {
                 Path clipPath = getClipPath(false /* ignoreTranslation */);
                 if (clipPath != null) {
-                    outline.setConvexPath(clipPath);
+                    outline.setPath(clipPath);
                 }
             }
             outline.setAlpha(mOutlineAlpha);