soul-browser/sources/java/j$/time/format/j.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

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 + "')";
}
}