AppLovin Execution Path: AppHub receives execution and proceeds towards DirectDownloadActivity

This post is part of AppLovin Nonconsensual Installs > Execution Path. See important disclosures.

Receiving 6 as its first parameter, AppHub’s onTransact() selects the corresponding case of the switch, passing execution to AppHub’s showDirectDownloadAppDetailsWithExtra().

public boolean onTransact(int i, Parcel parcel, Parcel parcel2, int i2) throws RemoteException {
...
    switch (i) {
...
        case 6:
           showDirectDownloadAppDetailsWithExtra(parcel.readString(), (Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR), IAppHubDirectDownloadServiceCallback.Stub.asInterface(parcel.readStrongBinder()));
            return true;
        case 7:
            directInstall(parcel.readString(), (Bundle) _Parcel.readTypedObject(parcel, Bundle.CREATOR), IAppHubDirectDownloadServiceCallback.Stub.asInterface(parcel.readStrongBinder()));
            return true; ...

Next, showDirectDownloadAppDetailsWithExtra() passes execution to service method AbstractC1838d0.m3826C() with delegate C2823r for asynchronous processing.

public final void showDirectDownloadAppDetailsWithExtra(String str, Bundle bundle, IAppHubDirectDownloadServiceCallback iAppHubDirectDownloadServiceCallback) {
    C4281e c4281e = AbstractC1870m0.f5700a;
    AbstractC1838d0.m3826C(AbstractC3671n.f11554a.f6073w, new C2823r(this, str, iAppHubDirectDownloadServiceCallback, bundle, null));
}

C2823r implements a Kotlin coroutine continuation with entry point mo410r(). After validating the ad token (details here), mo410r() passes execution to BinderC2829u.m4811d():

public final Object mo410r(Object obj) {...  
    return BinderC2829u.m4811d(binderC2829u, context, c1059x, c1965o2, m3145d, c3337g0, c2834w02, this) != enumC1084a ? enumC1084a : c6458y;
...

Next BinderC2829u.m4811d() prepares a DirectDownloadActivity intent and passes execution to c3429t1.m5750a():

public static final Object m4811d(BinderC2829u binderC2829u, Context context, C1059x c1059x, C1965o c1965o, Map map, C3337g0 c3337g0, C2834w0 c2834w0, AbstractC1576c abstractC1576c) {  //Activity Launch Preparation
    ...
    if (i != 0) {
        AbstractC6434a.m9578e(obj);
        m8400e = AbstractC5394a.m8400e(c1965o, map, EnumC3874oa.f11840t);
        C3469z0 c3469z0 = DirectDownloadActivity.Companion;
        if (map != null) {
            C1939b c1939b = C1941c.Companion;
            bundle = new Bundle(map.size());
            final C0292s c0292s = new C0292s(2, bundle, Bundle.class, "putString", "putString(Ljava/lang/String;Ljava/lang/String;)V", 0, 1);
            map.forEach(new BiConsumer() {
                @Override
                public final void accept(Object obj2, Object obj3) {
                    C0292s.this.mo413d(obj2, obj3);
                }
            });
        } else {
            bundle = null;
        }
        AbstractC4226k.m6579e(c3469z0, "");
        AbstractC4226k.m6579e(context, "context");
        AbstractC4226k.m6579e(c3337g0, "appLookupKey");
        Intent intent2 = new Intent(context, (Class<?>) DirectDownloadActivity.class);
        if (c1965o != null) {
            intent2.putExtra(DirectDownloadActivity.EXTRA_REMOTE_CONFIG, AbstractC4087l.m6100L(c1965o));
        }
        C3344h0 c3344h0 = InterfaceC3372l0.Companion;
        C6509s c6509s = AbstractC3379m0.f10651a;
        AbstractC4226k.m6579e(c3344h0, "");
        C6509s c6509s2 = AbstractC3379m0.f10651a;
        c6509s2.getClass();
        Intent addFlags = intent2.putExtra(DirectDownloadActivity.EXTRA_APP_LOOKUP_KEY, c6509s2.m9632c(c3344h0.serializer(), c3337g0)).putExtra(DirectDownloadActivity.EXTRA_EXTERNAL_EXTRA_PARAMS, bundle).putExtra(DirectDownloadActivity.EXTRA_FLOW_TRIGGER, 0).addFlags(268500992);
        AbstractC4226k.m6578d(addFlags, "addFlags(...)");
        try {
            C5552e1.m8622e(addFlags, c1059x);
            long m4257u0 = (c1965o == null || (mo2202a = c1965o.mo2202a("an.service.dd_activity_resuming_timeout_seconds")) == null || (m3138K = AbstractC1469t3.m3138K(mo2202a, EnumC1101c.SECONDS)) == null) ? AbstractC2271t1.m4257u0(3.0d, EnumC1101c.SECONDS) : m3138K.f3684a;
            C3429t1 c3429t1 = binderC2829u2.f8595o;
            c2825s2.f8558v = binderC2829u2;
            c2825s2.f8559w = c3337g0;
            c2834w02 = c2834w0;
            c2825s2.f8560x = c2834w02;
            c2825s2.f8561y = m8400e;
            c2825s2.f8562z = addFlags;
            c2825s2.f8557C = 1;
            obj = c3429t1.m5750a(context, addFlags, m4257u0, c2825s2);
            ...

Next m5750a() creates C3394o1:

public final Object m5750a(Context context, Intent intent, long j, AbstractC1576c abstractC1576c) { //coroutine orchestrator
    ...
    C3394o1 c3394o1 = new C3394o1(context, intent, strM3550a, null);
    ...

Then C3394o1 continuation entry point mo410r()starts the DirectDownloadActivity previously created:

public final Object mo410r(Object obj) { //Kotlin coroutine continuation
    AbstractC6434a.m9578e(obj);
    this.f10684w.startActivity(this.f10685x.putExtra ("com.applovin.array.directdownload.DirectDownloadActivityResumingTrackerService.EXTRA.LAUNCH_ID", this.f10686y));
    return C6458y.f19392a;
}

Execution continues in DirectDownloadActivity loads a WebView.