soul-browser/sources/java/android/support/customtabs/ICustomTabsCallback.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

384 lines
15 KiB
Java

package android.support.customtabs;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.os.IInterface;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.RestrictTo;
import kotlin.text.Typography;
@RestrictTo
/* loaded from: classes.dex */
public interface ICustomTabsCallback extends IInterface {
public static final String DESCRIPTOR = "android$support$customtabs$ICustomTabsCallback".replace(Typography.dollar, '.');
/* loaded from: classes.dex */
public static class Default implements ICustomTabsCallback {
@Override // android.os.IInterface
public IBinder asBinder() {
return null;
}
@Override // android.support.customtabs.ICustomTabsCallback
public void extraCallback(String str, Bundle bundle) {
}
@Override // android.support.customtabs.ICustomTabsCallback
public Bundle extraCallbackWithResult(String str, Bundle bundle) {
return null;
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onActivityLayout(int i, int i2, int i3, int i4, int i5, Bundle bundle) {
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onActivityResized(int i, int i2, Bundle bundle) {
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onMessageChannelReady(Bundle bundle) {
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onMinimized(Bundle bundle) {
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onNavigationEvent(int i, Bundle bundle) {
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onPostMessage(String str, Bundle bundle) {
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onRelationshipValidationResult(int i, Uri uri, boolean z, Bundle bundle) {
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onUnminimized(Bundle bundle) {
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onWarmupCompleted(Bundle bundle) {
}
}
/* loaded from: classes.dex */
public static abstract class Stub extends Binder implements ICustomTabsCallback {
static final int TRANSACTION_extraCallback = 3;
static final int TRANSACTION_extraCallbackWithResult = 7;
static final int TRANSACTION_onActivityLayout = 10;
static final int TRANSACTION_onActivityResized = 8;
static final int TRANSACTION_onMessageChannelReady = 4;
static final int TRANSACTION_onMinimized = 11;
static final int TRANSACTION_onNavigationEvent = 2;
static final int TRANSACTION_onPostMessage = 5;
static final int TRANSACTION_onRelationshipValidationResult = 6;
static final int TRANSACTION_onUnminimized = 12;
static final int TRANSACTION_onWarmupCompleted = 9;
/* loaded from: classes.dex */
public static class Proxy implements ICustomTabsCallback {
private IBinder mRemote;
public Proxy(IBinder iBinder) {
this.mRemote = iBinder;
}
@Override // android.os.IInterface
public IBinder asBinder() {
return this.mRemote;
}
@Override // android.support.customtabs.ICustomTabsCallback
public void extraCallback(String str, Bundle bundle) {
Parcel obtain = Parcel.obtain();
try {
obtain.writeInterfaceToken(ICustomTabsCallback.DESCRIPTOR);
obtain.writeString(str);
_Parcel.writeTypedObject(obtain, bundle, 0);
this.mRemote.transact(3, obtain, null, 1);
} finally {
obtain.recycle();
}
}
@Override // android.support.customtabs.ICustomTabsCallback
public Bundle extraCallbackWithResult(String str, Bundle bundle) {
Parcel obtain = Parcel.obtain();
Parcel obtain2 = Parcel.obtain();
try {
obtain.writeInterfaceToken(ICustomTabsCallback.DESCRIPTOR);
obtain.writeString(str);
_Parcel.writeTypedObject(obtain, bundle, 0);
this.mRemote.transact(7, obtain, obtain2, 0);
obtain2.readException();
return (Bundle) _Parcel.readTypedObject(obtain2, Bundle.CREATOR);
} finally {
obtain2.recycle();
obtain.recycle();
}
}
public String getInterfaceDescriptor() {
return ICustomTabsCallback.DESCRIPTOR;
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onActivityLayout(int i, int i2, int i3, int i4, int i5, Bundle bundle) {
Parcel obtain = Parcel.obtain();
try {
obtain.writeInterfaceToken(ICustomTabsCallback.DESCRIPTOR);
obtain.writeInt(i);
obtain.writeInt(i2);
obtain.writeInt(i3);
obtain.writeInt(i4);
obtain.writeInt(i5);
_Parcel.writeTypedObject(obtain, bundle, 0);
this.mRemote.transact(10, obtain, null, 1);
} finally {
obtain.recycle();
}
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onActivityResized(int i, int i2, Bundle bundle) {
Parcel obtain = Parcel.obtain();
try {
obtain.writeInterfaceToken(ICustomTabsCallback.DESCRIPTOR);
obtain.writeInt(i);
obtain.writeInt(i2);
_Parcel.writeTypedObject(obtain, bundle, 0);
this.mRemote.transact(8, obtain, null, 1);
} finally {
obtain.recycle();
}
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onMessageChannelReady(Bundle bundle) {
Parcel obtain = Parcel.obtain();
Parcel obtain2 = Parcel.obtain();
try {
obtain.writeInterfaceToken(ICustomTabsCallback.DESCRIPTOR);
_Parcel.writeTypedObject(obtain, bundle, 0);
this.mRemote.transact(4, obtain, obtain2, 0);
obtain2.readException();
} finally {
obtain2.recycle();
obtain.recycle();
}
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onMinimized(Bundle bundle) {
Parcel obtain = Parcel.obtain();
try {
obtain.writeInterfaceToken(ICustomTabsCallback.DESCRIPTOR);
_Parcel.writeTypedObject(obtain, bundle, 0);
this.mRemote.transact(11, obtain, null, 1);
} finally {
obtain.recycle();
}
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onNavigationEvent(int i, Bundle bundle) {
Parcel obtain = Parcel.obtain();
try {
obtain.writeInterfaceToken(ICustomTabsCallback.DESCRIPTOR);
obtain.writeInt(i);
_Parcel.writeTypedObject(obtain, bundle, 0);
this.mRemote.transact(2, obtain, null, 1);
} finally {
obtain.recycle();
}
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onPostMessage(String str, Bundle bundle) {
Parcel obtain = Parcel.obtain();
Parcel obtain2 = Parcel.obtain();
try {
obtain.writeInterfaceToken(ICustomTabsCallback.DESCRIPTOR);
obtain.writeString(str);
_Parcel.writeTypedObject(obtain, bundle, 0);
this.mRemote.transact(5, obtain, obtain2, 0);
obtain2.readException();
} finally {
obtain2.recycle();
obtain.recycle();
}
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onRelationshipValidationResult(int i, Uri uri, boolean z, Bundle bundle) {
Parcel obtain = Parcel.obtain();
try {
obtain.writeInterfaceToken(ICustomTabsCallback.DESCRIPTOR);
obtain.writeInt(i);
_Parcel.writeTypedObject(obtain, uri, 0);
obtain.writeInt(z ? 1 : 0);
_Parcel.writeTypedObject(obtain, bundle, 0);
this.mRemote.transact(6, obtain, null, 1);
} finally {
obtain.recycle();
}
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onUnminimized(Bundle bundle) {
Parcel obtain = Parcel.obtain();
try {
obtain.writeInterfaceToken(ICustomTabsCallback.DESCRIPTOR);
_Parcel.writeTypedObject(obtain, bundle, 0);
this.mRemote.transact(12, obtain, null, 1);
} finally {
obtain.recycle();
}
}
@Override // android.support.customtabs.ICustomTabsCallback
public void onWarmupCompleted(Bundle bundle) {
Parcel obtain = Parcel.obtain();
try {
obtain.writeInterfaceToken(ICustomTabsCallback.DESCRIPTOR);
_Parcel.writeTypedObject(obtain, bundle, 0);
this.mRemote.transact(9, obtain, null, 1);
} finally {
obtain.recycle();
}
}
}
public Stub() {
attachInterface(this, ICustomTabsCallback.DESCRIPTOR);
}
public static ICustomTabsCallback asInterface(IBinder iBinder) {
if (iBinder == null) {
return null;
}
IInterface queryLocalInterface = iBinder.queryLocalInterface(ICustomTabsCallback.DESCRIPTOR);
if (queryLocalInterface != null && (queryLocalInterface instanceof ICustomTabsCallback)) {
return (ICustomTabsCallback) queryLocalInterface;
}
return new Proxy(iBinder);
}
@Override // android.os.IInterface
public IBinder asBinder() {
return this;
}
/* JADX WARN: Failed to find 'out' block for switch in B:11:0x0016. Please report as an issue. */
@Override // android.os.Binder
public boolean onTransact(int i, Parcel parcel, Parcel parcel2, int i2) {
boolean z;
String str = ICustomTabsCallback.DESCRIPTOR;
if (i >= 1 && i <= 16777215) {
parcel.enforceInterface(str);
}
if (i == 1598968902) {
parcel2.writeString(str);
return true;
}
switch (i) {
case 2:
onNavigationEvent(parcel.readInt(), (Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR));
return true;
case 3:
extraCallback(parcel.readString(), (Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR));
return true;
case 4:
onMessageChannelReady((Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR));
parcel2.writeNoException();
return true;
case 5:
onPostMessage(parcel.readString(), (Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR));
parcel2.writeNoException();
return true;
case 6:
int readInt = parcel.readInt();
Uri uri = (Uri) _Parcel.readTypedObject(parcel, Uri.CREATOR);
if (parcel.readInt() != 0) {
z = true;
} else {
z = false;
}
onRelationshipValidationResult(readInt, uri, z, (Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR));
return true;
case 7:
Bundle extraCallbackWithResult = extraCallbackWithResult(parcel.readString(), (Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR));
parcel2.writeNoException();
_Parcel.writeTypedObject(parcel2, extraCallbackWithResult, 1);
return true;
case 8:
onActivityResized(parcel.readInt(), parcel.readInt(), (Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR));
return true;
case 9:
onWarmupCompleted((Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR));
return true;
case 10:
onActivityLayout(parcel.readInt(), parcel.readInt(), parcel.readInt(), parcel.readInt(), parcel.readInt(), (Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR));
return true;
case 11:
onMinimized((Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR));
return true;
case 12:
onUnminimized((Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR));
return true;
default:
return super.onTransact(i, parcel, parcel2, i2);
}
}
}
/* loaded from: classes.dex */
public static class _Parcel {
/* JADX INFO: Access modifiers changed from: private */
public static <T> T readTypedObject(Parcel parcel, Parcelable.Creator<T> creator) {
if (parcel.readInt() != 0) {
return creator.createFromParcel(parcel);
}
return null;
}
/* JADX INFO: Access modifiers changed from: private */
public static <T extends Parcelable> void writeTypedObject(Parcel parcel, T t, int i) {
if (t != null) {
parcel.writeInt(1);
t.writeToParcel(parcel, i);
} else {
parcel.writeInt(0);
}
}
}
void extraCallback(String str, Bundle bundle);
Bundle extraCallbackWithResult(String str, Bundle bundle);
void onActivityLayout(int i, int i2, int i3, int i4, int i5, Bundle bundle);
void onActivityResized(int i, int i2, Bundle bundle);
void onMessageChannelReady(Bundle bundle);
void onMinimized(Bundle bundle);
void onNavigationEvent(int i, Bundle bundle);
void onPostMessage(String str, Bundle bundle);
void onRelationshipValidationResult(int i, Uri uri, boolean z, Bundle bundle);
void onUnminimized(Bundle bundle);
void onWarmupCompleted(Bundle bundle);
}