android: add AndroidChannelBuilder#fromBuilder (#4723)

This commit is contained in:
Eric Gribkoff 2018-08-02 09:14:27 -07:00 committed by GitHub
parent 6fa2822923
commit f329d120d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 6 deletions

View File

@ -27,6 +27,7 @@ import android.net.NetworkInfo;
import android.os.Build;
import android.util.Log;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import io.grpc.CallOptions;
import io.grpc.ClientCall;
import io.grpc.ConnectivityState;
@ -41,7 +42,6 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
import javax.annotation.concurrent.GuardedBy;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSocketFactory;
/**
@ -81,6 +81,10 @@ public final class AndroidChannelBuilder extends ForwardingChannelBuilder<Androi
return forTarget(GrpcUtil.authorityFromHostAndPort(name, port));
}
public static AndroidChannelBuilder fromBuilder(ManagedChannelBuilder builder) {
return new AndroidChannelBuilder(builder);
}
private AndroidChannelBuilder(String target) {
if (OKHTTP_CHANNEL_BUILDER_CLASS == null) {
throw new UnsupportedOperationException("No ManagedChannelBuilder found on the classpath");
@ -96,13 +100,23 @@ public final class AndroidChannelBuilder extends ForwardingChannelBuilder<Androi
}
}
private AndroidChannelBuilder(ManagedChannelBuilder delegateBuilder) {
this.delegateBuilder = Preconditions.checkNotNull(delegateBuilder, "delegateBuilder");
}
/** Enables automatic monitoring of the device's network state. */
public AndroidChannelBuilder context(Context context) {
this.context = context;
return this;
}
/** Set the delegate channel builder's transportExecutor. */
/**
* Set the delegate channel builder's transportExecutor.
*
* @deprecated Use {@link #fromBuilder(ManagedChannelBuilder)} with a pre-configured
* ManagedChannelBuilder instead.
*/
@Deprecated
public AndroidChannelBuilder transportExecutor(@Nullable Executor transportExecutor) {
try {
OKHTTP_CHANNEL_BUILDER_CLASS
@ -114,7 +128,13 @@ public final class AndroidChannelBuilder extends ForwardingChannelBuilder<Androi
}
}
/** Set the delegate channel builder's sslSocketFactory. */
/**
* Set the delegate channel builder's sslSocketFactory.
*
* @deprecated Use {@link #fromBuilder(ManagedChannelBuilder)} with a pre-configured
* ManagedChannelBuilder instead.
*/
@Deprecated
public AndroidChannelBuilder sslSocketFactory(SSLSocketFactory factory) {
try {
OKHTTP_CHANNEL_BUILDER_CLASS
@ -126,7 +146,13 @@ public final class AndroidChannelBuilder extends ForwardingChannelBuilder<Androi
}
}
/** Set the delegate channel builder's scheduledExecutorService. */
/**
* Set the delegate channel builder's scheduledExecutorService.
*
* @deprecated Use {@link #fromBuilder(ManagedChannelBuilder)} with a pre-configured
* ManagedChannelBuilder instead.
*/
@Deprecated
public AndroidChannelBuilder scheduledExecutorService(
ScheduledExecutorService scheduledExecutorService) {
try {

View File

@ -31,6 +31,7 @@ import io.grpc.CallOptions;
import io.grpc.ClientCall;
import io.grpc.ManagedChannel;
import io.grpc.MethodDescriptor;
import io.grpc.okhttp.OkHttpChannelBuilder;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
@ -40,8 +41,6 @@ import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import org.junit.Before;
import org.junit.Test;
@ -96,6 +95,13 @@ public final class AndroidChannelBuilderTest {
AndroidChannelBuilder.forTarget("target");
}
@Test
public void fromBuilderConstructor() {
OkHttpChannelBuilder wrappedBuilder = OkHttpChannelBuilder.forTarget("target");
AndroidChannelBuilder androidBuilder = AndroidChannelBuilder.fromBuilder(wrappedBuilder);
assertThat(androidBuilder.delegate()).isSameAs(wrappedBuilder);
}
@Test
public void transportExecutor() {
AndroidChannelBuilder.forTarget("target")