Remove clipRegion from the public API.

This API is difficult to support for printing and has other negative
effects as it does not respect the current matrix/clip.

Test: compile
Bug: 14650725
Change-Id: I71f9bd687d446c7ce8910d755421aad8e09458db
diff --git a/api/current.txt b/api/current.txt
index ec16f5a..a4bbcd2 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -11946,8 +11946,6 @@
     method public boolean clipRect(float, float, float, float, android.graphics.Region.Op);
     method public boolean clipRect(float, float, float, float);
     method public boolean clipRect(int, int, int, int);
-    method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op);
-    method public deprecated boolean clipRegion(android.graphics.Region);
     method public void concat(android.graphics.Matrix);
     method public void drawARGB(int, int, int, int);
     method public void drawArc(android.graphics.RectF, float, float, boolean, android.graphics.Paint);
diff --git a/api/removed.txt b/api/removed.txt
index 35b4859..d7a8bce 100644
--- a/api/removed.txt
+++ b/api/removed.txt
@@ -78,6 +78,11 @@
     enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET;
   }
 
+  public class Canvas {
+    method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op);
+    method public deprecated boolean clipRegion(android.graphics.Region);
+  }
+
   public deprecated class LayerRasterizer extends android.graphics.Rasterizer {
     ctor public LayerRasterizer();
     method public void addLayer(android.graphics.Paint, float, float);
diff --git a/api/system-current.txt b/api/system-current.txt
index 5f173cf..734512d 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -12443,8 +12443,6 @@
     method public boolean clipRect(float, float, float, float, android.graphics.Region.Op);
     method public boolean clipRect(float, float, float, float);
     method public boolean clipRect(int, int, int, int);
-    method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op);
-    method public deprecated boolean clipRegion(android.graphics.Region);
     method public void concat(android.graphics.Matrix);
     method public void drawARGB(int, int, int, int);
     method public void drawArc(android.graphics.RectF, float, float, boolean, android.graphics.Paint);
diff --git a/api/system-removed.txt b/api/system-removed.txt
index 8016f58..7ba88bd 100644
--- a/api/system-removed.txt
+++ b/api/system-removed.txt
@@ -76,6 +76,11 @@
     enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET;
   }
 
+  public class Canvas {
+    method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op);
+    method public deprecated boolean clipRegion(android.graphics.Region);
+  }
+
   public deprecated class LayerRasterizer extends android.graphics.Rasterizer {
     ctor public LayerRasterizer();
     method public void addLayer(android.graphics.Paint, float, float);
diff --git a/api/test-current.txt b/api/test-current.txt
index d4fb027..582b591 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -11977,8 +11977,6 @@
     method public boolean clipRect(float, float, float, float, android.graphics.Region.Op);
     method public boolean clipRect(float, float, float, float);
     method public boolean clipRect(int, int, int, int);
-    method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op);
-    method public deprecated boolean clipRegion(android.graphics.Region);
     method public void concat(android.graphics.Matrix);
     method public void drawARGB(int, int, int, int);
     method public void drawArc(android.graphics.RectF, float, float, boolean, android.graphics.Paint);
diff --git a/api/test-removed.txt b/api/test-removed.txt
index 35b4859..d7a8bce 100644
--- a/api/test-removed.txt
+++ b/api/test-removed.txt
@@ -78,6 +78,11 @@
     enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET;
   }
 
+  public class Canvas {
+    method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op);
+    method public deprecated boolean clipRegion(android.graphics.Region);
+  }
+
   public deprecated class LayerRasterizer extends android.graphics.Rasterizer {
     ctor public LayerRasterizer();
     method public void addLayer(android.graphics.Paint, float, float);
diff --git a/core/jni/android_graphics_Canvas.cpp b/core/jni/android_graphics_Canvas.cpp
index be9449b..9ce5670 100644
--- a/core/jni/android_graphics_Canvas.cpp
+++ b/core/jni/android_graphics_Canvas.cpp
@@ -219,13 +219,6 @@
     return nonEmptyClip ? JNI_TRUE : JNI_FALSE;
 }
 
-static jboolean clipRegion(JNIEnv* env, jobject, jlong canvasHandle, jlong deviceRgnHandle,
-                           jint opHandle) {
-    SkRegion* deviceRgn = reinterpret_cast<SkRegion*>(deviceRgnHandle);
-    bool nonEmptyClip = get_canvas(canvasHandle)->clipRegion(deviceRgn, opHandleToClipOp(opHandle));
-    return nonEmptyClip ? JNI_TRUE : JNI_FALSE;
-}
-
 static void drawColor(JNIEnv* env, jobject, jlong canvasHandle, jint color, jint modeHandle) {
     SkBlendMode mode = static_cast<SkBlendMode>(modeHandle);
     get_canvas(canvasHandle)->drawColor(color, mode);
@@ -616,7 +609,6 @@
     {"nQuickReject","(JFFFF)Z", (void*)CanvasJNI::quickRejectRect},
     {"nClipRect","(JFFFFI)Z", (void*) CanvasJNI::clipRect},
     {"nClipPath","(JJI)Z", (void*) CanvasJNI::clipPath},
-    {"nClipRegion","(JJI)Z", (void*) CanvasJNI::clipRegion},
     {"nSetDrawFilter", "(JJ)V", (void*) CanvasJNI::setDrawFilter},
 };
 
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index b093458..cc5cc7b 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -801,12 +801,13 @@
      * @param op How the clip is modified
      * @return true if the resulting is non-empty
      *
+     * @removed
      * @deprecated Unlike all other clip calls this API does not respect the
      *             current matrix. Use {@link #clipRect(Rect)} as an alternative.
      */
     @Deprecated
     public boolean clipRegion(@NonNull Region region, @NonNull Region.Op op) {
-        return nClipRegion(mNativeCanvasWrapper, region.ni(), op.nativeInt);
+        return false;
     }
 
     /**
@@ -819,12 +820,13 @@
      * @param region The region to operate on the current clip, based on op
      * @return true if the resulting is non-empty
      *
+     * @removed
      * @deprecated Unlike all other clip calls this API does not respect the
      *             current matrix. Use {@link #clipRect(Rect)} as an alternative.
      */
     @Deprecated
     public boolean clipRegion(@NonNull Region region) {
-        return clipRegion(region, Region.Op.INTERSECT);
+        return false;
     }
 
     public @Nullable DrawFilter getDrawFilter() {
@@ -1115,10 +1117,6 @@
                                                   long nativePath,
                                                   int regionOp);
     @FastNative
-    private static native boolean nClipRegion(long nativeCanvas,
-                                                    long nativeRegion,
-                                                    int regionOp);
-    @FastNative
     private static native void nSetDrawFilter(long nativeCanvas,
                                                    long nativeFilter);
     @FastNative
diff --git a/libs/hwui/CanvasState.cpp b/libs/hwui/CanvasState.cpp
index dbbf00d..9c068b0 100644
--- a/libs/hwui/CanvasState.cpp
+++ b/libs/hwui/CanvasState.cpp
@@ -212,11 +212,6 @@
     return !mSnapshot->clipIsEmpty();
 }
 
-bool CanvasState::clipRegion(const SkRegion* region, SkClipOp op) {
-    mSnapshot->clipRegionTransformed(*region, op);
-    return !mSnapshot->clipIsEmpty();
-}
-
 void CanvasState::setClippingOutline(LinearAllocator& allocator, const Outline* outline) {
     Rect bounds;
     float radius;
diff --git a/libs/hwui/CanvasState.h b/libs/hwui/CanvasState.h
index a805597..b1fe09e 100644
--- a/libs/hwui/CanvasState.h
+++ b/libs/hwui/CanvasState.h
@@ -124,7 +124,6 @@
 
     bool clipRect(float left, float top, float right, float bottom, SkClipOp op);
     bool clipPath(const SkPath* path, SkClipOp op);
-    bool clipRegion(const SkRegion* region, SkClipOp op);
 
     /**
      * Sets a "clipping outline", which is independent from the regular clip.
diff --git a/libs/hwui/ClipArea.h b/libs/hwui/ClipArea.h
index 2e56160..cf57516 100644
--- a/libs/hwui/ClipArea.h
+++ b/libs/hwui/ClipArea.h
@@ -146,7 +146,6 @@
     void setClip(float left, float top, float right, float bottom);
     void clipRectWithTransform(const Rect& r, const mat4* transform,
             SkRegion::Op op);
-    void clipRegion(const SkRegion& region, SkRegion::Op op);
     void clipPathWithTransform(const SkPath& path, const mat4* transform,
             SkRegion::Op op);
 
@@ -195,6 +194,7 @@
     void regionModeClipRectWithTransform(const Rect& r, const mat4* transform,
             SkRegion::Op op);
 
+    void clipRegion(const SkRegion& region, SkRegion::Op op);
     void ensureClipRegion();
     void onClipRegionUpdated();
 
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index effc65e..4f9a3de 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -22,6 +22,7 @@
 #include "Caches.h"
 #include "Debug.h"
 #include "Extensions.h"
+#include "font/Font.h"
 #include "Glop.h"
 #include "GlopBuilder.h"
 #include "PixelBuffer.h"
diff --git a/libs/hwui/RecordingCanvas.cpp b/libs/hwui/RecordingCanvas.cpp
index 96c6d29..ee6279d 100644
--- a/libs/hwui/RecordingCanvas.cpp
+++ b/libs/hwui/RecordingCanvas.cpp
@@ -240,9 +240,6 @@
 bool RecordingCanvas::clipPath(const SkPath* path, SkClipOp op) {
     return mState.clipPath(path, op);
 }
-bool RecordingCanvas::clipRegion(const SkRegion* region, SkClipOp op) {
-    return mState.clipRegion(region, op);
-}
 
 // ----------------------------------------------------------------------------
 // android/graphics/Canvas draw operations
diff --git a/libs/hwui/RecordingCanvas.h b/libs/hwui/RecordingCanvas.h
index 5d49385..44181bd 100644
--- a/libs/hwui/RecordingCanvas.h
+++ b/libs/hwui/RecordingCanvas.h
@@ -134,7 +134,6 @@
     virtual bool clipRect(float left, float top, float right, float bottom,
             SkClipOp op) override;
     virtual bool clipPath(const SkPath* path, SkClipOp op) override;
-    virtual bool clipRegion(const SkRegion* region, SkClipOp op) override;
 
     // Misc
     virtual SkDrawFilter* getDrawFilter() override { return mDrawFilter.get(); }
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index 8cae771..344df0a 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -416,23 +416,6 @@
     return !mCanvas->isClipEmpty();
 }
 
-bool SkiaCanvas::clipRegion(const SkRegion* region, SkClipOp op) {
-    SkPath rgnPath;
-    if (region->getBoundaryPath(&rgnPath)) {
-        // The region is specified in device space.
-        SkMatrix savedMatrix = mCanvas->getTotalMatrix();
-        mCanvas->resetMatrix();
-        this->recordClip(rgnPath, op);
-        mCanvas->clipPath(rgnPath, op);
-        mCanvas->setMatrix(savedMatrix);
-    } else {
-        const auto emptyClip = SkRect::MakeEmpty();
-        this->recordClip(emptyClip, op);
-        mCanvas->clipRect(emptyClip, op);
-    }
-    return !mCanvas->isClipEmpty();
-}
-
 // ----------------------------------------------------------------------------
 // Canvas state operations: Filters
 // ----------------------------------------------------------------------------
diff --git a/libs/hwui/SkiaCanvas.h b/libs/hwui/SkiaCanvas.h
index 9639ebd..34c3717 100644
--- a/libs/hwui/SkiaCanvas.h
+++ b/libs/hwui/SkiaCanvas.h
@@ -94,7 +94,6 @@
     virtual bool clipRect(float left, float top, float right, float bottom,
             SkClipOp op) override;
     virtual bool clipPath(const SkPath* path, SkClipOp op) override;
-    virtual bool clipRegion(const SkRegion* region, SkClipOp op) override;
 
     virtual SkDrawFilter* getDrawFilter() override;
     virtual void setDrawFilter(SkDrawFilter* drawFilter) override;
diff --git a/libs/hwui/SkiaCanvasProxy.cpp b/libs/hwui/SkiaCanvasProxy.cpp
index 75396f7..847c1cf 100644
--- a/libs/hwui/SkiaCanvasProxy.cpp
+++ b/libs/hwui/SkiaCanvasProxy.cpp
@@ -444,9 +444,5 @@
     mCanvas->clipPath(&path, op);
 }
 
-void SkiaCanvasProxy::onClipRegion(const SkRegion& region, SkClipOp op) {
-    mCanvas->clipRegion(&region, op);
-}
-
 }; // namespace uirenderer
 }; // namespace android
diff --git a/libs/hwui/SkiaCanvasProxy.h b/libs/hwui/SkiaCanvasProxy.h
index badcc1d..54dbdda 100644
--- a/libs/hwui/SkiaCanvasProxy.h
+++ b/libs/hwui/SkiaCanvasProxy.h
@@ -93,7 +93,6 @@
     virtual void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override;
     virtual void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override;
     virtual void onClipPath(const SkPath&, SkClipOp, ClipEdgeStyle) override;
-    virtual void onClipRegion(const SkRegion&, SkClipOp) override;
 
 private:
     Canvas* mCanvas;
diff --git a/libs/hwui/Snapshot.cpp b/libs/hwui/Snapshot.cpp
index 3f08009..9d719bd 100644
--- a/libs/hwui/Snapshot.cpp
+++ b/libs/hwui/Snapshot.cpp
@@ -72,11 +72,6 @@
 // Clipping
 ///////////////////////////////////////////////////////////////////////////////
 
-void Snapshot::clipRegionTransformed(const SkRegion& region, SkClipOp op) {
-    flags |= Snapshot::kFlagClipSet;
-    mClipArea->clipRegion(region, static_cast<SkRegion::Op>(op));
-}
-
 void Snapshot::clip(const Rect& localClip, SkClipOp op) {
     flags |= Snapshot::kFlagClipSet;
     mClipArea->clipRectWithTransform(localClip, transform, static_cast<SkRegion::Op>(op));
diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h
index 4f92657..8cd90a6 100644
--- a/libs/hwui/Snapshot.h
+++ b/libs/hwui/Snapshot.h
@@ -118,12 +118,6 @@
     void clipTransformed(const Rect& r, SkClipOp op = SkClipOp::kIntersect);
 
     /**
-     * Modifies the current clip with the specified region and operation.
-     * The specified region is considered already transformed.
-     */
-    void clipRegionTransformed(const SkRegion& region, SkClipOp op);
-
-    /**
      * Modifies the current clip with the specified path and operation.
      */
     void clipPath(const SkPath& path, SkClipOp op);
diff --git a/libs/hwui/hwui/Canvas.h b/libs/hwui/hwui/Canvas.h
index e7b6b2d..969d877 100644
--- a/libs/hwui/hwui/Canvas.h
+++ b/libs/hwui/hwui/Canvas.h
@@ -184,7 +184,6 @@
     virtual bool clipRect(float left, float top, float right, float bottom,
             SkClipOp op) = 0;
     virtual bool clipPath(const SkPath* path, SkClipOp op) = 0;
-    virtual bool clipRegion(const SkRegion* region, SkClipOp op) = 0;
 
     // filters
     virtual SkDrawFilter* getDrawFilter() = 0;