package com.topjohnwu.magisk;

import android.content.Context;
import android.content.ContextWrapper;
import android.util.Log;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

import io.michaelrocks.paranoid.Obfuscate;

@Obfuscate
public class DelegateRootService extends ContextWrapper {

    public DelegateRootService() {
        super(null);
    }

    @Override
    protected void attachBaseContext(Context base) {
        if (DynLoad.inject(base) == null)
            return;

        // Create the actual RootService and call its attachBaseContext
        try {
            Constructor<?> ctor = DynLoad.apkData.getRootService().getConstructor(Object.class);
            ctor.setAccessible(true);
            Object service = ctor.newInstance(this);
            Method m = ContextWrapper.class.getDeclaredMethod("attachBaseContext", Context.class);
            m.setAccessible(true);
            m.invoke(service, base);
        } catch (Exception e) {
            Log.e(DelegateRootService.class.getSimpleName(), "", e);
        }
    }
}
