soul-browser/sources/java/kotlin/time/DurationKt.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

205 lines
12 KiB
Java

package kotlin.time;
import com.google.android.gms.ads.RequestConfiguration;
import kotlin.Metadata;
import kotlin.SinceKotlin;
import kotlin.internal.InlineOnly;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.internal.Intrinsics;
import kotlin.jvm.internal.SourceDebugExtension;
import kotlin.math.MathKt;
import kotlin.ranges.RangesKt;
import org.jetbrains.annotations.NotNull;
@Metadata(d1 = {"\u0000:\n\u0000\n\u0002\u0018\u0002\n\u0002\u0010\b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\t\n\u0000\n\u0002\u0010\u0006\n\u0002\b\t\n\u0002\u0010\u000e\n\u0000\n\u0002\u0010\u000b\n\u0002\b\u0005\n\u0002\u0018\u0002\n\u0002\u0010\f\n\u0002\b\u0015\u001a\u0019\u0010\u0000\u001a\u00020\u0001*\u00020\u00022\u0006\u0010\u0003\u001a\u00020\u0004H\u0007¢\u0006\u0002\u0010\u0005\u001a\u0019\u0010\u0000\u001a\u00020\u0001*\u00020\u00062\u0006\u0010\u0003\u001a\u00020\u0004H\u0007¢\u0006\u0002\u0010\u0007\u001a\u0019\u0010\u0000\u001a\u00020\u0001*\u00020\b2\u0006\u0010\u0003\u001a\u00020\u0004H\u0007¢\u0006\u0002\u0010\t\u001a\u001c\u0010\n\u001a\u00020\u0001*\u00020\u00022\u0006\u0010\u000b\u001a\u00020\u0001H\u0087\\u0006\u0004\b\f\u0010\r\u001a\u001c\u0010\n\u001a\u00020\u0001*\u00020\b2\u0006\u0010\u000b\u001a\u00020\u0001H\u0087\\u0006\u0004\b\u000e\u0010\u000f\u001a\u001d\u0010\u0010\u001a\u00020\u00012\u0006\u0010\u0011\u001a\u00020\u00122\u0006\u0010\u0013\u001a\u00020\u0014H\u0002¢\u0006\u0002\u0010\u0015\u001a\u0010\u0010\u0016\u001a\u00020\u00062\u0006\u0010\u0011\u001a\u00020\u0012H\u0002\u001a)\u0010\u0017\u001a\u00020\u0012*\u00020\u00122\u0006\u0010\u0018\u001a\u00020\u00022\u0012\u0010\u0019\u001a\u000e\u0012\u0004\u0012\u00020\u001b\u0012\u0004\u0012\u00020\u00140\u001aH\u0082\b\u001a)\u0010\u001c\u001a\u00020\u0002*\u00020\u00122\u0006\u0010\u0018\u001a\u00020\u00022\u0012\u0010\u0019\u001a\u000e\u0012\u0004\u0012\u00020\u001b\u0012\u0004\u0012\u00020\u00140\u001aH\u0082\b\u001a\u0010\u0010!\u001a\u00020\u00062\u0006\u0010\"\u001a\u00020\u0006H\u0002\u001a\u0010\u0010#\u001a\u00020\u00062\u0006\u0010$\u001a\u00020\u0006H\u0002\u001a\u0015\u0010%\u001a\u00020\u00012\u0006\u0010&\u001a\u00020\u0006H\u0002¢\u0006\u0002\u0010'\u001a\u0015\u0010(\u001a\u00020\u00012\u0006\u0010)\u001a\u00020\u0006H\u0002¢\u0006\u0002\u0010'\u001a\u001d\u0010*\u001a\u00020\u00012\u0006\u0010+\u001a\u00020\u00062\u0006\u0010,\u001a\u00020\u0002H\u0002¢\u0006\u0002\u0010-\u001a\u0015\u0010.\u001a\u00020\u00012\u0006\u0010\"\u001a\u00020\u0006H\u0002¢\u0006\u0002\u0010'\u001a\u0015\u0010/\u001a\u00020\u00012\u0006\u0010$\u001a\u00020\u0006H\u0002¢\u0006\u0002\u0010'\"\u000e\u0010\u001d\u001a\u00020\u0002X\u0080T¢\u0006\u0002\n\u0000\"\u000e\u0010\u001e\u001a\u00020\u0006X\u0080T¢\u0006\u0002\n\u0000\"\u000e\u0010\u001f\u001a\u00020\u0006X\u0080T¢\u0006\u0002\n\u0000\"\u000e\u0010 \u001a\u00020\u0006X\u0082T¢\u0006\u0002\n\u0000¨\u00060"}, d2 = {"toDuration", "Lkotlin/time/Duration;", RequestConfiguration.MAX_AD_CONTENT_RATING_UNSPECIFIED, "unit", "Lkotlin/time/DurationUnit;", "(ILkotlin/time/DurationUnit;)J", RequestConfiguration.MAX_AD_CONTENT_RATING_UNSPECIFIED, "(JLkotlin/time/DurationUnit;)J", RequestConfiguration.MAX_AD_CONTENT_RATING_UNSPECIFIED, "(DLkotlin/time/DurationUnit;)J", "times", "duration", "times-mvk6XK0", "(IJ)J", "times-kIfJnKk", "(DJ)J", "parseDuration", "value", RequestConfiguration.MAX_AD_CONTENT_RATING_UNSPECIFIED, "strictIso", RequestConfiguration.MAX_AD_CONTENT_RATING_UNSPECIFIED, "(Ljava/lang/String;Z)J", "parseOverLongIsoComponent", "substringWhile", "startIndex", "predicate", "Lkotlin/Function1;", RequestConfiguration.MAX_AD_CONTENT_RATING_UNSPECIFIED, "skipWhile", "NANOS_IN_MILLIS", "MAX_NANOS", "MAX_MILLIS", "MAX_NANOS_IN_MILLIS", "nanosToMillis", "nanos", "millisToNanos", "millis", "durationOfNanos", "normalNanos", "(J)J", "durationOfMillis", "normalMillis", "durationOf", "normalValue", "unitDiscriminator", "(JI)J", "durationOfNanosNormalized", "durationOfMillisNormalized", "kotlin-stdlib"}, k = 2, mv = {2, 2, 0}, xi = 48)
@SourceDebugExtension({"SMAP\nDuration.kt\nKotlin\n*S Kotlin\n*F\n+ 1 Duration.kt\nkotlin/time/DurationKt\n+ 2 fake.kt\nkotlin/jvm/internal/FakeKt\n*L\n1#1,1062:1\n1015#1,6:1064\n1018#1,3:1070\n1015#1,6:1073\n1015#1,6:1079\n1018#1,3:1085\n1#2:1063\n*S KotlinDebug\n*F\n+ 1 Duration.kt\nkotlin/time/DurationKt\n*L\n930#1:1064,6\n964#1:1070,3\n967#1:1073,6\n970#1:1079,6\n1015#1:1085,3\n*E\n"})
/* loaded from: classes4.dex */
public final class DurationKt {
public static final long MAX_MILLIS = 4611686018427387903L;
public static final long MAX_NANOS = 4611686018426999999L;
private static final long MAX_NANOS_IN_MILLIS = 4611686018426L;
public static final int NANOS_IN_MILLIS = 1000000;
public static final long durationOf(long j, int i) {
return Duration.m1358constructorimpl((j << 1) + i);
}
public static final long durationOfMillis(long j) {
return Duration.m1358constructorimpl((j << 1) + 1);
}
public static final long durationOfMillisNormalized(long j) {
if (-4611686018426L <= j && j < 4611686018427L) {
return durationOfNanos(millisToNanos(j));
}
return durationOfMillis(RangesKt.coerceIn(j, -4611686018427387903L, MAX_MILLIS));
}
public static final long durationOfNanos(long j) {
return Duration.m1358constructorimpl(j << 1);
}
public static final long durationOfNanosNormalized(long j) {
if (-4611686018426999999L <= j && j < 4611686018427000000L) {
return durationOfNanos(j);
}
return durationOfMillis(nanosToMillis(j));
}
public static final long millisToNanos(long j) {
return j * NANOS_IN_MILLIS;
}
public static final long nanosToMillis(long j) {
return j / NANOS_IN_MILLIS;
}
/* JADX WARN: Removed duplicated region for block: B:15:0x0032 */
/* JADX WARN: Removed duplicated region for block: B:164:0x0257 */
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public static final long parseDuration(java.lang.String r19, boolean r20) {
/*
Method dump skipped, instructions count: 613
To view this dump add '--comments-level debug' option
*/
throw new UnsupportedOperationException("Method not decompiled: kotlin.time.DurationKt.parseDuration(java.lang.String, boolean):long");
}
/* JADX WARN: Removed duplicated region for block: B:8:0x0021 */
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
private static final long parseOverLongIsoComponent(java.lang.String r10) {
/*
int r0 = r10.length()
r1 = 1
r2 = 0
if (r0 <= 0) goto L16
java.lang.String r3 = "+-"
char r4 = r10.charAt(r2)
boolean r3 = kotlin.text.StringsKt.n(r3, r4)
if (r3 == 0) goto L16
r3 = r1
goto L17
L16:
r3 = r2
L17:
int r4 = r0 - r3
r5 = 58
r6 = 48
r7 = 16
if (r4 <= r7) goto L4d
r4 = r3
L22:
if (r3 >= r0) goto L38
char r8 = r10.charAt(r3)
if (r8 != r6) goto L2f
if (r4 != r3) goto L35
int r4 = r4 + 1
goto L35
L2f:
r9 = 49
if (r9 > r8) goto L4d
if (r8 >= r5) goto L4d
L35:
int r3 = r3 + 1
goto L22
L38:
int r3 = r0 - r4
if (r3 <= r7) goto L4d
char r10 = r10.charAt(r2)
r0 = 45
if (r10 != r0) goto L47
r0 = -9223372036854775808
return r0
L47:
r0 = 9223372036854775807(0x7fffffffffffffff, double:NaN)
return r0
L4d:
java.lang.String r2 = "+"
boolean r2 = kotlin.text.StringsKt.K(r10, r2)
if (r2 == 0) goto L68
if (r0 <= r1) goto L68
char r0 = r10.charAt(r1)
if (r6 > r0) goto L68
if (r0 >= r5) goto L68
java.lang.String r10 = kotlin.text.StringsKt.p(r10)
long r0 = java.lang.Long.parseLong(r10)
return r0
L68:
long r0 = java.lang.Long.parseLong(r10)
return r0
*/
throw new UnsupportedOperationException("Method not decompiled: kotlin.time.DurationKt.parseOverLongIsoComponent(java.lang.String):long");
}
private static final int skipWhile(String str, int i, Function1<? super Character, Boolean> function1) {
while (i < str.length() && function1.invoke(Character.valueOf(str.charAt(i))).booleanValue()) {
i++;
}
return i;
}
private static final String substringWhile(String str, int i, Function1<? super Character, Boolean> function1) {
int i2 = i;
while (i2 < str.length() && function1.invoke(Character.valueOf(str.charAt(i2))).booleanValue()) {
i2++;
}
Intrinsics.checkNotNull(str, "null cannot be cast to non-null type java.lang.String");
String substring = str.substring(i, i2);
Intrinsics.checkNotNullExpressionValue(substring, "substring(...)");
return substring;
}
@SinceKotlin(version = "1.6")
@InlineOnly
/* renamed from: times-kIfJnKk */
private static final long m1454timeskIfJnKk(double d, long j) {
return Duration.m1388timesUwyO8pc(j, d);
}
@SinceKotlin(version = "1.6")
@InlineOnly
/* renamed from: times-mvk6XK0 */
private static final long m1455timesmvk6XK0(int i, long j) {
return Duration.m1389timesUwyO8pc(j, i);
}
@SinceKotlin(version = "1.6")
public static final long toDuration(int i, @NotNull DurationUnit unit) {
Intrinsics.checkNotNullParameter(unit, "unit");
if (unit.compareTo(DurationUnit.SECONDS) <= 0) {
return durationOfNanos(DurationUnitKt__DurationUnitJvmKt.convertDurationUnitOverflow(i, unit, DurationUnit.NANOSECONDS));
}
return toDuration(i, unit);
}
@SinceKotlin(version = "1.6")
public static final long toDuration(long j, @NotNull DurationUnit unit) {
Intrinsics.checkNotNullParameter(unit, "unit");
DurationUnit durationUnit = DurationUnit.NANOSECONDS;
long convertDurationUnitOverflow = DurationUnitKt__DurationUnitJvmKt.convertDurationUnitOverflow(MAX_NANOS, durationUnit, unit);
if ((-convertDurationUnitOverflow) <= j && j <= convertDurationUnitOverflow) {
return durationOfNanos(DurationUnitKt__DurationUnitJvmKt.convertDurationUnitOverflow(j, unit, durationUnit));
}
return durationOfMillis(RangesKt.coerceIn(DurationUnitKt__DurationUnitJvmKt.convertDurationUnit(j, unit, DurationUnit.MILLISECONDS), -4611686018427387903L, MAX_MILLIS));
}
@SinceKotlin(version = "1.6")
public static final long toDuration(double d, @NotNull DurationUnit unit) {
Intrinsics.checkNotNullParameter(unit, "unit");
double convertDurationUnit = DurationUnitKt__DurationUnitJvmKt.convertDurationUnit(d, unit, DurationUnit.NANOSECONDS);
if (!Double.isNaN(convertDurationUnit)) {
long roundToLong = MathKt.roundToLong(convertDurationUnit);
if (-4611686018426999999L <= roundToLong && roundToLong < 4611686018427000000L) {
return durationOfNanos(roundToLong);
}
return durationOfMillisNormalized(MathKt.roundToLong(DurationUnitKt__DurationUnitJvmKt.convertDurationUnit(d, unit, DurationUnit.MILLISECONDS)));
}
throw new IllegalArgumentException("Duration value cannot be NaN.");
}
}