soul-browser/sources/java/androidx/vectordrawable/graphics/drawable/AnimatorInflaterCompat.java
KaKi87 550ddb0413
Decompile and recreate Soul Browser v1.4.85 with APK CI builds (#1)
* Decompile and recreate Soul Browser v1.4.85 with APK CI builds

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Fix CI build: include bundled google.jks and remove PR trigger

The apktool build failed in CI because app/unknown/.../google.jks was
excluded by the *.jks gitignore rule. Whitelist app-bundled JKS files
and commit the missing resource.

Also remove the redundant pull_request workflow trigger.

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Change package ID to com.github.kaki87.soulbrowser

Rename the application ID so the rebuilt APK can be installed
alongside the original Soul Browser from Google Play.

- Update AndroidManifest package, permissions, providers, and actions
- Update R class references in smali (com/github/kaki87/soulbrowser/R)
- Update shortcuts.xml targetPackage
- Rename app label to "Soul Rebuild" for easy identification

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Fix install compatibility: remove split APK metadata and bundle native libs

The rebuilt APK still declared requiredSplitTypes and Play Store split
metadata, causing Android to reject standalone installs as incompatible.

- Remove requiredSplitTypes and split-related manifest meta-data
- Merge native libs from all ABI splits with uncompressed storage
- Page-align before signing for extractNativeLibs=false
- Add .so to apktool doNotCompress list

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Fix install failure: use apksigner v2/v3 and bundle arm64 native libs

Target SDK 36 requires APK Signature Scheme v2+, but jarsigner only
produces v1 signatures, causing Android to reject the install.

- Sign with apksigner (v1+v2+v3) instead of jarsigner
- Add arm64-v8a native libraries from universal Soul Browser 1.4.79
- Set extractNativeLibs=true for reliable sideload installs
- Commit stable debug keystore for consistent signatures across builds

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Add committed debug keystore for consistent APK signatures

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Fix startup crash: use original classes2.dex desugar libraries

Apktool recompiles smali_classes2 into a broken classes2.dex, causing
ClassNotFoundException for j$.com.android.tools.r8.a at ML Kit init.

Inject the original classes2.dex (Java 8+ desugar libs) after apktool
build instead of using the recompiled version.

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Fix missing drawable resources from density split APKs

The base APK is an app bundle module; density-specific drawables like
seek_thumb_nor_b live in config.xhdpi.apk and were missing after rebuild,
causing Resources$NotFoundException at runtime.

- Merge non-9-patch resources from split APKs before apktool build
- Sync public.xml IDs from R smali only when backing files exist
- Add 713 density-specific resource IDs to public.xml

Co-authored-by: KaKi87 <KaKi87@pm.me>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-10 16:07:14 +02:00

451 lines
17 KiB
Java

package androidx.vectordrawable.graphics.drawable;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Path;
import android.graphics.PathMeasure;
import android.support.v4.media.a;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.InflateException;
import android.view.animation.AnimationUtils;
import androidx.annotation.RestrictTo;
import androidx.core.content.res.TypedArrayUtils;
import androidx.core.graphics.PathParser;
import com.google.android.gms.ads.RequestConfiguration;
import com.google.api.client.http.HttpStatusCodes;
import java.util.ArrayList;
import org.xmlpull.v1.XmlPullParser;
@RestrictTo
/* loaded from: classes.dex */
public class AnimatorInflaterCompat {
/* loaded from: classes.dex */
public static class PathDataEvaluator implements TypeEvaluator<PathParser.PathDataNode[]> {
/* renamed from: a, reason: collision with root package name */
public PathParser.PathDataNode[] f1738a;
@Override // android.animation.TypeEvaluator
public final PathParser.PathDataNode[] evaluate(float f, PathParser.PathDataNode[] pathDataNodeArr, PathParser.PathDataNode[] pathDataNodeArr2) {
PathParser.PathDataNode[] pathDataNodeArr3 = pathDataNodeArr;
PathParser.PathDataNode[] pathDataNodeArr4 = pathDataNodeArr2;
if (PathParser.a(pathDataNodeArr3, pathDataNodeArr4)) {
if (!PathParser.a(this.f1738a, pathDataNodeArr3)) {
this.f1738a = PathParser.e(pathDataNodeArr3);
}
for (int i = 0; i < pathDataNodeArr3.length; i++) {
PathParser.PathDataNode pathDataNode = this.f1738a[i];
PathParser.PathDataNode pathDataNode2 = pathDataNodeArr3[i];
PathParser.PathDataNode pathDataNode3 = pathDataNodeArr4[i];
pathDataNode.getClass();
pathDataNode.f685a = pathDataNode2.f685a;
int i2 = 0;
while (true) {
float[] fArr = pathDataNode2.b;
if (i2 < fArr.length) {
pathDataNode.b[i2] = (pathDataNode3.b[i2] * f) + ((1.0f - f) * fArr[i2]);
i2++;
}
}
}
return this.f1738a;
}
throw new IllegalArgumentException("Can't interpolate between two incompatible pathData");
}
}
/* JADX WARN: Code restructure failed: missing block: B:10:0x03a3, code lost:
r2 = new android.animation.Animator[r10.size()];
r3 = r10.size();
r11 = 0;
*/
/* JADX WARN: Code restructure failed: missing block: B:11:0x03ae, code lost:
if (r1 >= r3) goto L220;
*/
/* JADX WARN: Code restructure failed: missing block: B:12:0x03b0, code lost:
r4 = r10.get(r1);
r1 = r1 + 1;
r2[r11] = (android.animation.Animator) r4;
r11 = r11 + 1;
*/
/* JADX WARN: Code restructure failed: missing block: B:14:0x03be, code lost:
if (r33 != 0) goto L211;
*/
/* JADX WARN: Code restructure failed: missing block: B:15:0x03c0, code lost:
r32.playTogether(r2);
*/
/* JADX WARN: Code restructure failed: missing block: B:16:0x03c3, code lost:
return r0;
*/
/* JADX WARN: Code restructure failed: missing block: B:18:0x03c4, code lost:
r32.playSequentially(r2);
*/
/* JADX WARN: Code restructure failed: missing block: B:19:0x03c7, code lost:
return r0;
*/
/* JADX WARN: Code restructure failed: missing block: B:7:0x0017, code lost:
r1 = 0;
*/
/* JADX WARN: Code restructure failed: missing block: B:8:0x039f, code lost:
if (r32 == null) goto L212;
*/
/* JADX WARN: Code restructure failed: missing block: B:9:0x03a1, code lost:
if (r10 == null) goto L212;
*/
/* JADX WARN: Multi-variable type inference failed */
/* JADX WARN: Removed duplicated region for block: B:31:0x0377 A[ADDED_TO_REGION] */
/* JADX WARN: Removed duplicated region for block: B:33:0x037b */
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public static android.animation.Animator a(android.content.Context r27, android.content.res.Resources r28, android.content.res.Resources.Theme r29, org.xmlpull.v1.XmlPullParser r30, android.util.AttributeSet r31, android.animation.AnimatorSet r32, int r33) {
/*
Method dump skipped, instructions count: 968
To view this dump add '--comments-level debug' option
*/
throw new UnsupportedOperationException("Method not decompiled: androidx.vectordrawable.graphics.drawable.AnimatorInflaterCompat.a(android.content.Context, android.content.res.Resources, android.content.res.Resources$Theme, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.animation.AnimatorSet, int):android.animation.Animator");
}
/* JADX WARN: Type inference failed for: r0v5, types: [android.animation.TypeEvaluator, java.lang.Object] */
/* JADX WARN: Type inference failed for: r11v26, types: [android.animation.TypeEvaluator, java.lang.Object] */
public static PropertyValuesHolder b(TypedArray typedArray, int i, int i2, int i3, String str) {
boolean z;
int i4;
boolean z2;
int i5;
boolean z3;
ArgbEvaluator argbEvaluator;
int i6;
int i7;
int i8;
float f;
PropertyValuesHolder ofFloat;
float f2;
float f3;
TypedValue peekValue = typedArray.peekValue(i2);
if (peekValue != null) {
z = true;
} else {
z = false;
}
if (z) {
i4 = peekValue.type;
} else {
i4 = 0;
}
TypedValue peekValue2 = typedArray.peekValue(i3);
if (peekValue2 != null) {
z2 = true;
} else {
z2 = false;
}
if (z2) {
i5 = peekValue2.type;
} else {
i5 = 0;
}
if (i == 4) {
if ((z && c(i4)) || (z2 && c(i5))) {
i = 3;
} else {
i = 0;
}
}
if (i == 0) {
z3 = true;
} else {
z3 = false;
}
PropertyValuesHolder propertyValuesHolder = null;
if (i == 2) {
String string = typedArray.getString(i2);
String string2 = typedArray.getString(i3);
PathParser.PathDataNode[] c2 = PathParser.c(string);
PathParser.PathDataNode[] c3 = PathParser.c(string2);
if (c2 != null || c3 != null) {
if (c2 != null) {
?? obj = new Object();
if (c3 != null) {
if (PathParser.a(c2, c3)) {
return PropertyValuesHolder.ofObject(str, (TypeEvaluator) obj, c2, c3);
}
throw new InflateException(a.m(" Can't morph from ", string, " to ", string2));
}
return PropertyValuesHolder.ofObject(str, (TypeEvaluator) obj, c2);
}
if (c3 != null) {
return PropertyValuesHolder.ofObject(str, (TypeEvaluator) new Object(), c3);
}
}
return null;
}
if (i == 3) {
argbEvaluator = ArgbEvaluator.f1739a;
} else {
argbEvaluator = null;
}
if (z3) {
if (z) {
if (i4 == 5) {
f2 = typedArray.getDimension(i2, 0.0f);
} else {
f2 = typedArray.getFloat(i2, 0.0f);
}
if (z2) {
if (i5 == 5) {
f3 = typedArray.getDimension(i3, 0.0f);
} else {
f3 = typedArray.getFloat(i3, 0.0f);
}
ofFloat = PropertyValuesHolder.ofFloat(str, f2, f3);
} else {
ofFloat = PropertyValuesHolder.ofFloat(str, f2);
}
} else {
if (i5 == 5) {
f = typedArray.getDimension(i3, 0.0f);
} else {
f = typedArray.getFloat(i3, 0.0f);
}
ofFloat = PropertyValuesHolder.ofFloat(str, f);
}
propertyValuesHolder = ofFloat;
} else if (z) {
if (i4 == 5) {
i7 = (int) typedArray.getDimension(i2, 0.0f);
} else if (c(i4)) {
i7 = typedArray.getColor(i2, 0);
} else {
i7 = typedArray.getInt(i2, 0);
}
if (z2) {
if (i5 == 5) {
i8 = (int) typedArray.getDimension(i3, 0.0f);
} else if (c(i5)) {
i8 = typedArray.getColor(i3, 0);
} else {
i8 = typedArray.getInt(i3, 0);
}
propertyValuesHolder = PropertyValuesHolder.ofInt(str, i7, i8);
} else {
propertyValuesHolder = PropertyValuesHolder.ofInt(str, i7);
}
} else if (z2) {
if (i5 == 5) {
i6 = (int) typedArray.getDimension(i3, 0.0f);
} else if (c(i5)) {
i6 = typedArray.getColor(i3, 0);
} else {
i6 = typedArray.getInt(i3, 0);
}
propertyValuesHolder = PropertyValuesHolder.ofInt(str, i6);
}
if (propertyValuesHolder != null && argbEvaluator != null) {
propertyValuesHolder.setEvaluator(argbEvaluator);
}
return propertyValuesHolder;
}
public static boolean c(int i) {
return i >= 28 && i <= 31;
}
public static ValueAnimator d(Context context, Resources resources, Resources.Theme theme, AttributeSet attributeSet, ObjectAnimator objectAnimator, XmlPullParser xmlPullParser) {
ValueAnimator valueAnimator;
int i;
int i2;
int i3;
int i4;
ValueAnimator valueAnimator2;
int i5;
int i6;
ValueAnimator valueAnimator3;
PropertyValuesHolder propertyValuesHolder;
PropertyValuesHolder propertyValuesHolder2;
boolean z;
int i7;
boolean z2;
int i8;
TypedArray d = TypedArrayUtils.d(resources, theme, attributeSet, AndroidResources.g);
TypedArray d2 = TypedArrayUtils.d(resources, theme, attributeSet, AndroidResources.k);
if (objectAnimator == null) {
valueAnimator = new ValueAnimator();
} else {
valueAnimator = objectAnimator;
}
boolean c2 = TypedArrayUtils.c(xmlPullParser, "duration");
int i9 = HttpStatusCodes.STATUS_CODE_MULTIPLE_CHOICES;
if (c2) {
i9 = d.getInt(1, HttpStatusCodes.STATUS_CODE_MULTIPLE_CHOICES);
}
long j = i9;
if (xmlPullParser.getAttributeValue("http://schemas.android.com/apk/res/android", "startOffset") != null) {
i = d.getInt(2, 0);
} else {
i = 0;
}
long j2 = i;
if (xmlPullParser.getAttributeValue("http://schemas.android.com/apk/res/android", "valueType") != null) {
i2 = d.getInt(7, 4);
} else {
i2 = 4;
}
if (xmlPullParser.getAttributeValue("http://schemas.android.com/apk/res/android", "valueFrom") != null && xmlPullParser.getAttributeValue("http://schemas.android.com/apk/res/android", "valueTo") != null) {
if (i2 == 4) {
TypedValue peekValue = d.peekValue(5);
if (peekValue != null) {
z = true;
} else {
z = false;
}
if (z) {
i7 = peekValue.type;
} else {
i7 = 0;
}
TypedValue peekValue2 = d.peekValue(6);
if (peekValue2 != null) {
z2 = true;
} else {
z2 = false;
}
if (z2) {
i8 = peekValue2.type;
} else {
i8 = 0;
}
if ((z && c(i7)) || (z2 && c(i8))) {
i2 = 3;
} else {
i2 = 0;
}
}
PropertyValuesHolder b = b(d, i2, 5, 6, RequestConfiguration.MAX_AD_CONTENT_RATING_UNSPECIFIED);
if (b != null) {
valueAnimator.setValues(b);
}
}
valueAnimator.setDuration(j);
valueAnimator.setStartDelay(j2);
if (xmlPullParser.getAttributeValue("http://schemas.android.com/apk/res/android", "repeatCount") != null) {
i3 = d.getInt(3, 0);
} else {
i3 = 0;
}
valueAnimator.setRepeatCount(i3);
if (xmlPullParser.getAttributeValue("http://schemas.android.com/apk/res/android", "repeatMode") != null) {
i4 = d.getInt(4, 1);
} else {
i4 = 1;
}
valueAnimator.setRepeatMode(i4);
if (d2 != null) {
ObjectAnimator objectAnimator2 = (ObjectAnimator) valueAnimator;
String b2 = TypedArrayUtils.b(d2, xmlPullParser, "pathData", 1);
if (b2 != null) {
String b3 = TypedArrayUtils.b(d2, xmlPullParser, "propertyXName", 2);
String b4 = TypedArrayUtils.b(d2, xmlPullParser, "propertyYName", 3);
if (i2 != 2) {
}
if (b3 == null && b4 == null) {
throw new InflateException(d2.getPositionDescription() + " propertyXName or propertyYName is needed for PathData");
}
Path d3 = PathParser.d(b2);
PathMeasure pathMeasure = new PathMeasure(d3, false);
ArrayList arrayList = new ArrayList();
arrayList.add(Float.valueOf(0.0f));
float f = 0.0f;
do {
f += pathMeasure.getLength();
arrayList.add(Float.valueOf(f));
} while (pathMeasure.nextContour());
PathMeasure pathMeasure2 = new PathMeasure(d3, false);
int min = Math.min(100, ((int) (f / 0.5f)) + 1);
float[] fArr = new float[min];
float[] fArr2 = new float[min];
float[] fArr3 = new float[2];
float f2 = f / (min - 1);
int i10 = 0;
valueAnimator2 = valueAnimator;
float f3 = 0.0f;
int i11 = 0;
while (true) {
propertyValuesHolder = null;
if (i10 >= min) {
break;
}
int i12 = min;
pathMeasure2.getPosTan(f3 - ((Float) arrayList.get(i11)).floatValue(), fArr3, null);
fArr[i10] = fArr3[0];
fArr2[i10] = fArr3[1];
int i13 = i11 + 1;
f3 += f2;
if (i13 < arrayList.size() && f3 > ((Float) arrayList.get(i13)).floatValue()) {
pathMeasure2.nextContour();
i11 = i13;
}
i10++;
min = i12;
}
if (b3 != null) {
propertyValuesHolder2 = PropertyValuesHolder.ofFloat(b3, fArr);
} else {
propertyValuesHolder2 = null;
}
if (b4 != null) {
propertyValuesHolder = PropertyValuesHolder.ofFloat(b4, fArr2);
}
if (propertyValuesHolder2 == null) {
objectAnimator2.setValues(propertyValuesHolder);
} else if (propertyValuesHolder == null) {
objectAnimator2.setValues(propertyValuesHolder2);
} else {
objectAnimator2.setValues(propertyValuesHolder2, propertyValuesHolder);
}
i5 = 0;
} else {
valueAnimator2 = valueAnimator;
i5 = 0;
objectAnimator2.setPropertyName(TypedArrayUtils.b(d2, xmlPullParser, "propertyName", 0));
}
} else {
valueAnimator2 = valueAnimator;
i5 = 0;
}
if (xmlPullParser.getAttributeValue("http://schemas.android.com/apk/res/android", "interpolator") != null) {
i6 = d.getResourceId(i5, i5);
} else {
i6 = i5;
}
if (i6 > 0) {
valueAnimator3 = valueAnimator2;
valueAnimator3.setInterpolator(AnimationUtils.loadInterpolator(context, i6));
} else {
valueAnimator3 = valueAnimator2;
}
d.recycle();
if (d2 != null) {
d2.recycle();
}
return valueAnimator3;
}
}