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..89a705d24eed13ff612543ea9dbfaa14c2b2e50a 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,20 @@ void ShapeDetectionService::OnBindInterface( |
std::move(interface_pipe)); |
} |
+#if defined(OS_ANDROID) |
+service_manager::InterfaceProvider* ShapeDetectionService::GetJavaInterfaces() { |
+ if (!java_interface_provider_) { |
+ service_manager::mojom::InterfaceProviderPtr provider; |
+ Java_InterfaceRegistrar_createInterfaceRegistryForContext( |
+ base::android::AttachCurrentThread(), |
+ mojo::MakeRequest(&provider).PassMessagePipe().release().value(), |
+ base::android::GetApplicationContext()); |
+ java_interface_provider_ = |
+ base::MakeUnique<service_manager::InterfaceProvider>(); |
+ java_interface_provider_->Bind(std::move(provider)); |
+ } |
+ return java_interface_provider_.get(); |
+} |
+#endif |
+ |
} // namespace shape_detection |