#ifndef SERVICES_DEVICE_USB_USB_SERVICE_ANDROID_H_
#define SERVICES_DEVICE_USB_USB_SERVICE_ANDROID_H_
#include <jni.h>
#include <unordered_map>
#include "base/android/scoped_java_ref.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "services/device/usb/usb_service.h"
namespace device {
class UsbDeviceAndroid;
class UsbServiceAndroid final : public UsbService {
public:
UsbServiceAndroid();
~UsbServiceAndroid() override;
void DeviceAttached(JNIEnv* env,
const base::android::JavaRef<jobject>& usb_device);
void DeviceDetached(JNIEnv* env,
jint device_id);
void DevicePermissionRequestComplete(JNIEnv* env,
jint device_id,
jboolean granted);
base::android::ScopedJavaLocalRef<jobject> OpenDevice(
JNIEnv* env,
const base::android::JavaRef<jobject>& wrapper);
bool HasDevicePermission(const base::android::JavaRef<jobject>& wrapper);
void RequestDevicePermission(const base::android::JavaRef<jobject>& wrapper);
private:
void AddDevice(scoped_refptr<UsbDeviceAndroid> device);
std::unordered_map<jint, scoped_refptr<UsbDeviceAndroid>> devices_by_id_;
base::android::ScopedJavaGlobalRef<jobject> j_object_;
base::WeakPtrFactory<UsbServiceAndroid> weak_factory_{this};
};
}
#endif