Index: device/usb/usb_service_android.cc |
diff --git a/device/usb/usb_service_android.cc b/device/usb/usb_service_android.cc |
index 45ce49979eccdecd82f239e7b8f3834eadc196c0..3bdf3bc6332650f8b426a8c18cff7586a36ef251 100644 |
--- a/device/usb/usb_service_android.cc |
+++ b/device/usb/usb_service_android.cc |
@@ -4,14 +4,30 @@ |
#include "device/usb/usb_service_android.h" |
+#include <string> |
+#include <vector> |
+ |
+#include "base/android/context_utils.h" |
#include "base/bind.h" |
#include "base/location.h" |
#include "base/thread_task_runner_handle.h" |
-#include "device/usb/usb_device.h" |
+#include "device/usb/usb_device_android.h" |
+#include "jni/ChromeUsbService_jni.h" |
+ |
+using base::android::AttachCurrentThread; |
+using base::android::ScopedJavaLocalRef; |
namespace device { |
-UsbServiceAndroid::UsbServiceAndroid() {} |
+// static |
+bool UsbServiceAndroid::RegisterJNI(JNIEnv* env) { |
+ return RegisterNativesImpl(env); // Generated in ChromeUsbService_jni.h |
+} |
+ |
+UsbServiceAndroid::UsbServiceAndroid() { |
+ j_object_.Reset(Java_ChromeUsbService_create( |
+ AttachCurrentThread(), base::android::GetApplicationContext())); |
+} |
UsbServiceAndroid::~UsbServiceAndroid() {} |
@@ -20,9 +36,20 @@ scoped_refptr<UsbDevice> UsbServiceAndroid::GetDevice(const std::string& guid) { |
} |
void UsbServiceAndroid::GetDevices(const GetDevicesCallback& callback) { |
- std::vector<scoped_refptr<UsbDevice>> empty; |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jobjectArray> devices = |
+ Java_ChromeUsbService_getDevices(env, j_object_.obj()); |
+ jsize length = env->GetArrayLength(devices.obj()); |
+ |
+ std::vector<scoped_refptr<UsbDevice>> results; |
+ for (jsize i = 0; i < length; ++i) { |
+ ScopedJavaLocalRef<jobject> raw_device( |
+ env, env->GetObjectArrayElement(devices.obj(), i)); |
+ results.push_back(UsbDeviceAndroid::Create(env, raw_device)); |
+ } |
+ |
base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
- base::Bind(callback, empty)); |
+ base::Bind(callback, results)); |
} |
} // namespace device |