Index: services/shape_detection/shape_detection_service.cc |
diff --git a/services/shape_detection/shape_detection_service.cc b/services/shape_detection/shape_detection_service.cc |
index 7f9f83f07762905c4338715c52bf4b2225f4096d..57a48207f2eabc6060fa60196daae973836dc6a5 100644 |
--- a/services/shape_detection/shape_detection_service.cc |
+++ b/services/shape_detection/shape_detection_service.cc |
@@ -10,6 +10,12 @@ |
#include "services/shape_detection/face_detection_provider_impl.h" |
#include "services/shape_detection/text_detection_impl.h" |
+#if defined(OS_ANDROID) |
+#include "base/android/context_utils.h" |
+#include "base/android/jni_android.h" |
+#include "jni/InterfaceRegistrar_jni.h" |
+#endif |
+ |
namespace shape_detection { |
std::unique_ptr<service_manager::Service> ShapeDetectionService::Create() { |
@@ -24,9 +30,18 @@ void ShapeDetectionService::OnStart() { |
ref_factory_.reset(new service_manager::ServiceContextRefFactory( |
base::Bind(&service_manager::ServiceContext::RequestQuit, |
base::Unretained(context())))); |
+ |
+#if defined(OS_ANDROID) |
+ registry_.AddInterface( |
+ GetJavaInterfaces()->CreateInterfaceFactory<mojom::BarcodeDetection>()); |
+ registry_.AddInterface( |
+ GetJavaInterfaces()->CreateInterfaceFactory<mojom::TextDetection>()); |
+#else |
registry_.AddInterface(base::Bind(&BarcodeDetectionImpl::Create)); |
- registry_.AddInterface(base::Bind(&FaceDetectionProviderImpl::Create)); |
registry_.AddInterface(base::Bind(&TextDetectionImpl::Create)); |
+#endif |
+ |
+ registry_.AddInterface(base::Bind(&FaceDetectionProviderImpl::Create)); |
} |
void ShapeDetectionService::OnBindInterface( |
@@ -37,4 +52,21 @@ void ShapeDetectionService::OnBindInterface( |
std::move(interface_pipe)); |
} |
+#if defined(OS_ANDROID) |
+service_manager::InterfaceProvider* ShapeDetectionService::GetJavaInterfaces() { |
+ if (!java_interface_provider_initialized_) { |
+ service_manager::mojom::InterfaceProviderPtr provider; |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_InterfaceRegistrar_createInterfaceRegistryForContext( |
+ env, mojo::MakeRequest(&provider).PassMessagePipe().release().value(), |
+ base::android::GetApplicationContext()); |
+ java_interface_provider_.Bind(std::move(provider)); |
+ |
+ java_interface_provider_initialized_ = true; |
+ } |
+ |
+ return &java_interface_provider_; |
+} |
+#endif |
+ |
} // namespace shape_detection |