An ATproto social media client -- with an independent Appview.
1diff --git a/node_modules/react-native-svg/android/src/main/java/com/horcrux/svg/PathView.java b/node_modules/react-native-svg/android/src/main/java/com/horcrux/svg/PathView.java
2index 06829bd..1b15818 100644
3--- a/node_modules/react-native-svg/android/src/main/java/com/horcrux/svg/PathView.java
4+++ b/node_modules/react-native-svg/android/src/main/java/com/horcrux/svg/PathView.java
5@@ -14,17 +14,33 @@ import android.graphics.Paint;
6 import android.graphics.Path;
7 import com.facebook.react.bridge.ReactContext;
8
9+import java.util.ArrayList;
10+import java.util.HashMap;
11+
12+class ParsedPath {
13+ final Path path;
14+ final ArrayList<PathElement> elements;
15+
16+ ParsedPath(Path path, ArrayList<PathElement> elements) {
17+ this.path = path;
18+ this.elements = elements;
19+ }
20+}
21+
22 @SuppressLint("ViewConstructor")
23 class PathView extends RenderableView {
24 private Path mPath;
25
26+ // This grows forever but for our use case (static icons) it's ok.
27+ private static final HashMap<String, ParsedPath> sPathCache = new HashMap<>();
28+
29 public PathView(ReactContext reactContext) {
30 super(reactContext);
31 PathParser.mScale = mScale;
32 mPath = new Path();
33 }
34
35- public void setD(String d) {
36+ void setDByParsing(String d) {
37 mPath = PathParser.parse(d);
38 elements = PathParser.elements;
39 for (PathElement elem : elements) {
40@@ -33,6 +49,17 @@ class PathView extends RenderableView {
41 point.y *= mScale;
42 }
43 }
44+ }
45+
46+ public void setD(String d) {
47+ ParsedPath cached = sPathCache.get(d);
48+ if (cached != null) {
49+ mPath = cached.path;
50+ elements = cached.elements;
51+ } else {
52+ setDByParsing(d);
53+ sPathCache.put(d, new ParsedPath(mPath, elements));
54+ }
55 invalidate();
56 }
57