From 09ebb4f4067a086b3c93172e09f5c3553b0e6f65 Mon Sep 17 00:00:00 2001 From: Eric Gribkoff Date: Wed, 1 Aug 2018 15:20:13 -0700 Subject: [PATCH 1/2] android: add AndroidChannelBuilder#fromBuilder --- .../grpc/android/AndroidChannelBuilder.java | 33 ++++++++++++++++--- .../android/AndroidChannelBuilderTest.java | 10 ++++-- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/android/src/main/java/io/grpc/android/AndroidChannelBuilder.java b/android/src/main/java/io/grpc/android/AndroidChannelBuilder.java index 24b8719ce7e..ff69779ab38 100644 --- a/android/src/main/java/io/grpc/android/AndroidChannelBuilder.java +++ b/android/src/main/java/io/grpc/android/AndroidChannelBuilder.java @@ -41,7 +41,6 @@ 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 +80,10 @@ public static AndroidChannelBuilder forAddress(String name, int port) { 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 +99,23 @@ private AndroidChannelBuilder(String target) { } } + private AndroidChannelBuilder(ManagedChannelBuilder delegateBuilder) { + this.delegateBuilder = delegate; + } + /** 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 +127,13 @@ public AndroidChannelBuilder transportExecutor(@Nullable Executor transportExecu } } - /** 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 +145,13 @@ public AndroidChannelBuilder sslSocketFactory(SSLSocketFactory factory) { } } - /** 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 { diff --git a/android/src/test/java/io/grpc/android/AndroidChannelBuilderTest.java b/android/src/test/java/io/grpc/android/AndroidChannelBuilderTest.java index c90553656f9..0a74fa43656 100644 --- a/android/src/test/java/io/grpc/android/AndroidChannelBuilderTest.java +++ b/android/src/test/java/io/grpc/android/AndroidChannelBuilderTest.java @@ -31,6 +31,7 @@ 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.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 void channelBuilderClassFoundReflectively() { 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") From 7f614c0bc65add4ac215e99fbf100fa03bee2d3a Mon Sep 17 00:00:00 2001 From: Eric Gribkoff Date: Wed, 1 Aug 2018 16:39:30 -0700 Subject: [PATCH 2/2] check not null --- .../src/main/java/io/grpc/android/AndroidChannelBuilder.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/io/grpc/android/AndroidChannelBuilder.java b/android/src/main/java/io/grpc/android/AndroidChannelBuilder.java index ff69779ab38..d5de35bc595 100644 --- a/android/src/main/java/io/grpc/android/AndroidChannelBuilder.java +++ b/android/src/main/java/io/grpc/android/AndroidChannelBuilder.java @@ -27,6 +27,7 @@ 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; @@ -100,7 +101,7 @@ private AndroidChannelBuilder(String target) { } private AndroidChannelBuilder(ManagedChannelBuilder delegateBuilder) { - this.delegateBuilder = delegate; + this.delegateBuilder = Preconditions.checkNotNull(delegateBuilder, "delegateBuilder"); } /** Enables automatic monitoring of the device's network state. */