package com.lody.virtual.client.ipc;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
import com.lody.virtual.client.core.VirtualCore;
import com.lody.virtual.helper.compat.ContentProviderCompat;
import java.io.Serializable;
/**
* @author Lody
*
*/
public class ProviderCall {
public static Bundle call(String authority, String methodName, String arg, Bundle bundle) {
return call(authority, VirtualCore.get().getContext(), methodName, arg, bundle);
}
public static Bundle call(String authority, Context context, String method, String arg, Bundle bundle) {
Uri uri = Uri.parse("content://" + authority);
return ContentProviderCompat.call(context, uri, method, arg, bundle);
}
public static final class Builder {
private Context context;
private Bundle bundle = new Bundle();
private String method;
private String auth;
private String arg;
public Builder(Context context, String auth) {
this.context = context;
this.auth = auth;
}
public Builder methodName(String name) {
this.method = name;
return this;
}
public Builder arg(String arg) {
this.arg = arg;
return this;
}
public Builder addArg(String key, Object value) {
if (value != null) {
if (value instanceof Boolean) {
bundle.putBoolean(key, (Boolean) value);
} else if (value instanceof Integer) {
bundle.putInt(key, (Integer) value);
} else if (value instanceof String) {
bundle.putString(key, (String) value);
} else if (value instanceof Serializable) {
bundle.putSerializable(key, (Serializable) value);
} else if (value instanceof Bundle) {
bundle.putBundle(key, (Bundle) value);
} else if (value instanceof Parcelable) {
bundle.putParcelable(key, (Parcelable) value);
} else {
throw new IllegalArgumentException("Unknown type " + value.getClass() + " in Bundle.");
}
}
return this;
}
public Bundle call() {
return ProviderCall.call(auth, context, method, arg, bundle);
}
}
}