* 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>
270 lines
9.2 KiB
Java
270 lines
9.2 KiB
Java
package j$.time.format;
|
|
|
|
import com.google.android.gms.ads.RequestConfiguration;
|
|
import j$.util.Objects;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public final class j implements e {
|
|
public static final String[] d = {"+HH", "+HHmm", "+HH:mm", "+HHMM", "+HH:MM", "+HHMMss", "+HH:MM:ss", "+HHMMSS", "+HH:MM:SS", "+HHmmss", "+HH:mm:ss", "+H", "+Hmm", "+H:mm", "+HMM", "+H:MM", "+HMMss", "+H:MM:ss", "+HMMSS", "+H:MM:SS", "+Hmmss", "+H:mm:ss"};
|
|
public static final j e = new j("+HH:MM:ss", "Z");
|
|
public static final j f = new j("+HH:MM:ss", "0");
|
|
|
|
/* renamed from: a, reason: collision with root package name */
|
|
public final String f21204a;
|
|
public final int b;
|
|
|
|
/* renamed from: c, reason: collision with root package name */
|
|
public final int f21205c;
|
|
|
|
public j(String str, String str2) {
|
|
Objects.requireNonNull(str, "pattern");
|
|
Objects.requireNonNull(str2, "noOffsetText");
|
|
for (int i = 0; i < 22; i++) {
|
|
if (d[i].equals(str)) {
|
|
this.b = i;
|
|
this.f21205c = i % 11;
|
|
this.f21204a = str2;
|
|
return;
|
|
}
|
|
}
|
|
throw new IllegalArgumentException("Invalid zone offset pattern: " + str);
|
|
}
|
|
|
|
@Override // j$.time.format.e
|
|
public final boolean d(y yVar, StringBuilder sb) {
|
|
Long a2 = yVar.a(j$.time.temporal.a.OFFSET_SECONDS);
|
|
boolean z = false;
|
|
if (a2 == null) {
|
|
return false;
|
|
}
|
|
int H = j$.com.android.tools.r8.a.H(a2.longValue());
|
|
String str = this.f21204a;
|
|
if (H == 0) {
|
|
sb.append(str);
|
|
return true;
|
|
}
|
|
int abs = Math.abs((H / 3600) % 100);
|
|
int abs2 = Math.abs((H / 60) % 60);
|
|
int abs3 = Math.abs(H % 60);
|
|
int length = sb.length();
|
|
sb.append(H < 0 ? "-" : "+");
|
|
if (this.b < 11 || abs >= 10) {
|
|
a(false, abs, sb);
|
|
} else {
|
|
sb.append((char) (abs + 48));
|
|
}
|
|
int i = this.f21205c;
|
|
if ((i >= 3 && i <= 8) || ((i >= 9 && abs3 > 0) || (i >= 1 && abs2 > 0))) {
|
|
a(i > 0 && i % 2 == 0, abs2, sb);
|
|
abs += abs2;
|
|
if (i == 7 || i == 8 || (i >= 5 && abs3 > 0)) {
|
|
if (i > 0 && i % 2 == 0) {
|
|
z = true;
|
|
}
|
|
a(z, abs3, sb);
|
|
abs += abs3;
|
|
}
|
|
}
|
|
if (abs == 0) {
|
|
sb.setLength(length);
|
|
sb.append(str);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static void a(boolean z, int i, StringBuilder sb) {
|
|
sb.append(z ? ":" : RequestConfiguration.MAX_AD_CONTENT_RATING_UNSPECIFIED);
|
|
sb.append((char) ((i / 10) + 48));
|
|
sb.append((char) ((i % 10) + 48));
|
|
}
|
|
|
|
@Override // j$.time.format.e
|
|
public final int g(v vVar, CharSequence charSequence, int i) {
|
|
CharSequence charSequence2;
|
|
int i2;
|
|
int i3;
|
|
int i4;
|
|
int i5;
|
|
int length = charSequence.length();
|
|
int length2 = this.f21204a.length();
|
|
if (length2 == 0) {
|
|
if (i == length) {
|
|
return vVar.f(j$.time.temporal.a.OFFSET_SECONDS, 0L, i, i);
|
|
}
|
|
charSequence2 = charSequence;
|
|
} else {
|
|
if (i == length) {
|
|
return ~i;
|
|
}
|
|
charSequence2 = charSequence;
|
|
if (vVar.g(charSequence2, i, this.f21204a, 0, length2)) {
|
|
return vVar.f(j$.time.temporal.a.OFFSET_SECONDS, 0L, i, i + length2);
|
|
}
|
|
}
|
|
char charAt = charSequence.charAt(i);
|
|
if (charAt == '+' || charAt == '-') {
|
|
int i6 = charAt == '-' ? -1 : 1;
|
|
int i7 = this.f21205c;
|
|
boolean z = i7 > 0 && i7 % 2 == 0;
|
|
int i8 = this.b;
|
|
boolean z2 = i8 < 11;
|
|
int[] iArr = new int[4];
|
|
iArr[0] = i + 1;
|
|
if (!vVar.f21220c) {
|
|
if (z2) {
|
|
if (z || (i8 == 0 && length > (i5 = i + 3) && charSequence2.charAt(i5) == ':')) {
|
|
i8 = 10;
|
|
z = true;
|
|
} else {
|
|
i8 = 9;
|
|
}
|
|
} else if (z || (i8 == 11 && length > (i4 = i + 3) && (charSequence2.charAt(i + 2) == ':' || charSequence2.charAt(i4) == ':'))) {
|
|
i8 = 21;
|
|
z = true;
|
|
} else {
|
|
i8 = 20;
|
|
}
|
|
}
|
|
switch (i8) {
|
|
case 0:
|
|
case 11:
|
|
c(charSequence2, z2, iArr);
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
case 13:
|
|
c(charSequence2, z2, iArr);
|
|
e(charSequence2, z, false, iArr);
|
|
break;
|
|
case 3:
|
|
case 4:
|
|
case 15:
|
|
c(charSequence2, z2, iArr);
|
|
e(charSequence2, z, true, iArr);
|
|
break;
|
|
case 5:
|
|
case 6:
|
|
case 17:
|
|
c(charSequence2, z2, iArr);
|
|
e(charSequence2, z, true, iArr);
|
|
b(charSequence2, z, 3, iArr);
|
|
break;
|
|
case 7:
|
|
case 8:
|
|
case 19:
|
|
c(charSequence2, z2, iArr);
|
|
e(charSequence2, z, true, iArr);
|
|
if (!b(charSequence2, z, 3, iArr)) {
|
|
iArr[0] = ~iArr[0];
|
|
break;
|
|
}
|
|
break;
|
|
case 9:
|
|
case 10:
|
|
case 21:
|
|
c(charSequence2, z2, iArr);
|
|
if (b(charSequence2, z, 2, iArr)) {
|
|
b(charSequence2, z, 3, iArr);
|
|
break;
|
|
}
|
|
break;
|
|
case 12:
|
|
f(charSequence2, 1, 4, iArr);
|
|
break;
|
|
case 14:
|
|
f(charSequence2, 3, 4, iArr);
|
|
break;
|
|
case 16:
|
|
f(charSequence2, 3, 6, iArr);
|
|
break;
|
|
case 18:
|
|
f(charSequence2, 5, 6, iArr);
|
|
break;
|
|
case 20:
|
|
f(charSequence2, 1, 6, iArr);
|
|
break;
|
|
}
|
|
int i9 = iArr[0];
|
|
if (i9 > 0) {
|
|
int i10 = iArr[1];
|
|
if (i10 > 23 || (i2 = iArr[2]) > 59 || (i3 = iArr[3]) > 59) {
|
|
throw new RuntimeException("Value out of range: Hour[0-23], Minute[0-59], Second[0-59]");
|
|
}
|
|
return vVar.f(j$.time.temporal.a.OFFSET_SECONDS, ((i2 * 60) + (i10 * 3600) + i3) * i6, i, i9);
|
|
}
|
|
}
|
|
return length2 == 0 ? vVar.f(j$.time.temporal.a.OFFSET_SECONDS, 0L, i, i) : ~i;
|
|
}
|
|
|
|
public static void c(CharSequence charSequence, boolean z, int[] iArr) {
|
|
if (z) {
|
|
if (b(charSequence, false, 1, iArr)) {
|
|
return;
|
|
}
|
|
iArr[0] = ~iArr[0];
|
|
return;
|
|
}
|
|
f(charSequence, 1, 2, iArr);
|
|
}
|
|
|
|
public static void e(CharSequence charSequence, boolean z, boolean z2, int[] iArr) {
|
|
if (b(charSequence, z, 2, iArr) || !z2) {
|
|
return;
|
|
}
|
|
iArr[0] = ~iArr[0];
|
|
}
|
|
|
|
public static boolean b(CharSequence charSequence, boolean z, int i, int[] iArr) {
|
|
int i2 = iArr[0];
|
|
if (i2 < 0) {
|
|
return true;
|
|
}
|
|
if (z && i != 1) {
|
|
int i3 = i2 + 1;
|
|
if (i3 <= charSequence.length() && charSequence.charAt(i2) == ':') {
|
|
i2 = i3;
|
|
}
|
|
return false;
|
|
}
|
|
int i4 = i2 + 2;
|
|
if (i4 <= charSequence.length()) {
|
|
int i5 = i2 + 1;
|
|
char charAt = charSequence.charAt(i2);
|
|
char charAt2 = charSequence.charAt(i5);
|
|
if (charAt >= '0' && charAt <= '9' && charAt2 >= '0' && charAt2 <= '9') {
|
|
int i6 = (charAt2 - '0') + ((charAt - '0') * 10);
|
|
if (i6 >= 0 && i6 <= 59) {
|
|
iArr[i] = i6;
|
|
iArr[0] = i4;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:13:0x0029, code lost:
|
|
|
|
r12[0] = ~r12[0];
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:14:0x002e, code lost:
|
|
|
|
return;
|
|
*/
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
public static void f(java.lang.CharSequence r9, int r10, int r11, int[] r12) {
|
|
/*
|
|
Method dump skipped, instructions count: 196
|
|
To view this dump add '--comments-level debug' option
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: j$.time.format.j.f(java.lang.CharSequence, int, int, int[]):void");
|
|
}
|
|
|
|
public final String toString() {
|
|
String replace = this.f21204a.replace("'", "''");
|
|
return "Offset(" + d[this.b] + ",'" + replace + "')";
|
|
}
|
|
}
|