package com.lody.virtual.server.secondary;
import android.content.ComponentName;
import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
import com.lody.virtual.server.IBinderDelegateService;
import java.util.HashMap;
import java.util.Map;
/**
* @author Lody
*/
public class BinderDelegateService extends IBinderDelegateService.Stub {
private ComponentName name;
private IBinder service;
private interface ProxyBinderFactory {
IBinder create(Binder binder);
}
private static final Map<String, ProxyBinderFactory> mFactories = new HashMap<>();
static {
mFactories.put("android.accounts.IAccountAuthenticator", new ProxyBinderFactory() {
@Override
public IBinder create(Binder binder) {
return new FakeIdentityBinder(binder);
}
});
}
public BinderDelegateService(ComponentName name, IBinder service) {
this.name = name;
if (service instanceof Binder) {
Binder localService = (Binder) service;
ProxyBinderFactory factory = mFactories.get(localService.getInterfaceDescriptor());
if (factory != null) {
service = factory.create(localService);
}
}
this.service = service;
}
@Override
public ComponentName getComponent() throws RemoteException {
return name;
}
@Override
public IBinder getService() throws RemoteException {
return service;
}
}