An ATproto social media client -- with an independent Appview.
at main 1.8 kB view raw
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