package com.topjohnwu.magisk;

import android.app.Application;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.Configuration;

import java.lang.reflect.Method;

import io.michaelrocks.paranoid.Obfuscate;

@Obfuscate
public class DelegateApplication extends Application {

    private Application receiver;

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);

        receiver = DynLoad.setup(this);
        if (receiver != null) try {
            // Call attachBaseContext without ContextImpl to show it is being wrapped
            Method m = ContextWrapper.class.getDeclaredMethod("attachBaseContext", Context.class);
            m.setAccessible(true);
            m.invoke(receiver, this);
        } catch (Exception ignored) { /* Impossible */ }
    }

    @Override
    public void onCreate() {
        super.onCreate();
        if (receiver != null)
            receiver.onCreate();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if (receiver != null)
            receiver.onConfigurationChanged(newConfig);
    }
}
