summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author John Reck <jreck@google.com> 2018-11-14 15:14:44 -0800
committer John Reck <jreck@google.com> 2018-11-14 15:25:10 -0800
commit5c6397e9bbc017a12a748fe818917adc470319b6 (patch)
treef39863879dd5c2b1e406ee1881ef9b1a18ab2428
parent24f78ddda76d870373a1fbe875fc46b4054af84d (diff)
Add compat workaround
Bug: 119066174 Test: repro from bug Change-Id: Ifc50fc64422d571ee94ce8510825aed7f915adfd
-rw-r--r--core/java/android/view/DisplayListCanvas.java48
-rw-r--r--core/java/android/view/RenderNodeAnimator.java6
-rw-r--r--graphics/java/android/graphics/RecordingCanvas.java6
3 files changed, 58 insertions, 2 deletions
diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java
new file mode 100644
index 000000000000..043b31d108e6
--- /dev/null
+++ b/core/java/android/view/DisplayListCanvas.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import android.annotation.UnsupportedAppUsage;
+import android.graphics.BaseRecordingCanvas;
+import android.graphics.CanvasProperty;
+import android.graphics.Paint;
+
+/**
+ * This class exists temporarily to workaround broken apps
+ *
+ * b/119066174
+ *
+ * @hide
+ */
+public abstract class DisplayListCanvas extends BaseRecordingCanvas {
+
+ /** @hide */
+ protected DisplayListCanvas(long nativeCanvas) {
+ super(nativeCanvas);
+ }
+
+ /** @hide */
+ @UnsupportedAppUsage
+ public abstract void drawRoundRect(CanvasProperty<Float> left, CanvasProperty<Float> top,
+ CanvasProperty<Float> right, CanvasProperty<Float> bottom, CanvasProperty<Float> rx,
+ CanvasProperty<Float> ry, CanvasProperty<Paint> paint);
+
+ /** @hide */
+ @UnsupportedAppUsage
+ public abstract void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy,
+ CanvasProperty<Float> radius, CanvasProperty<Paint> paint);
+}
diff --git a/core/java/android/view/RenderNodeAnimator.java b/core/java/android/view/RenderNodeAnimator.java
index 9d31bd16b452..78ad0dabc81a 100644
--- a/core/java/android/view/RenderNodeAnimator.java
+++ b/core/java/android/view/RenderNodeAnimator.java
@@ -293,6 +293,12 @@ public class RenderNodeAnimator extends Animator {
setTarget(canvas.mNode);
}
+ /** @hide */
+ @UnsupportedAppUsage
+ public void setTarget(DisplayListCanvas canvas) {
+ setTarget((RecordingCanvas) canvas);
+ }
+
private void setTarget(RenderNode node) {
checkMutable();
if (mTarget != null) {
diff --git a/graphics/java/android/graphics/RecordingCanvas.java b/graphics/java/android/graphics/RecordingCanvas.java
index fd5d62406da7..67ad4045868e 100644
--- a/graphics/java/android/graphics/RecordingCanvas.java
+++ b/graphics/java/android/graphics/RecordingCanvas.java
@@ -19,6 +19,7 @@ package android.graphics;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.util.Pools.SynchronizedPool;
+import android.view.DisplayListCanvas;
import android.view.TextureLayer;
import dalvik.annotation.optimization.CriticalNative;
@@ -34,7 +35,7 @@ import dalvik.annotation.optimization.FastNative;
* {@link RenderNode#endRecording()} is called. It must not be retained beyond that as it is
* internally reused.
*/
-public final class RecordingCanvas extends BaseRecordingCanvas {
+public final class RecordingCanvas extends DisplayListCanvas {
// The recording canvas pool should be large enough to handle a deeply nested
// view hierarchy because display lists are generated recursively.
private static final int POOL_LIMIT = 25;
@@ -89,7 +90,8 @@ public final class RecordingCanvas extends BaseRecordingCanvas {
// Constructors
///////////////////////////////////////////////////////////////////////////
- private RecordingCanvas(@NonNull RenderNode node, int width, int height) {
+ /** @hide */
+ protected RecordingCanvas(@NonNull RenderNode node, int width, int height) {
super(nCreateDisplayListCanvas(node.mNativeRenderNode, width, height));
mDensity = 0; // disable bitmap density scaling
}