package com.lody.virtual.client.hook.base;

import android.os.IBinder;
import android.os.IInterface;

import mirror.android.os.ServiceManager;

/**
 * @author Paulo Costa
 *
 * @see PatchDelegate
 */
public abstract class PatchBinderDelegate extends PatchDelegate<HookBinderDelegate> {

	protected String serviceName;

	public PatchBinderDelegate(IInterface stub, String serviceName) {
		this(new HookBinderDelegate(stub), serviceName);
	}

	public PatchBinderDelegate(Class<?> stubClass, String serviceName) {
		this(new HookBinderDelegate(stubClass, ServiceManager.getService.call(serviceName)), serviceName);
	}

	public PatchBinderDelegate(HookBinderDelegate hookDelegate, String serviceName) {
		super(hookDelegate);
		this.serviceName = serviceName;
	}

	@Override
	public void inject() throws Throwable {
		getHookDelegate().replaceService(serviceName);
	}

	@Override
	public boolean isEnvBad() {
		IBinder binder = ServiceManager.getService.call(serviceName);
		return binder != null && getHookDelegate() != binder;
	}
}