summaryrefslogtreecommitdiff
path: root/mojo/android/system/src/org/chromium/mojo/system/impl/WatcherImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'mojo/android/system/src/org/chromium/mojo/system/impl/WatcherImpl.java')
-rw-r--r--mojo/android/system/src/org/chromium/mojo/system/impl/WatcherImpl.java63
1 files changed, 63 insertions, 0 deletions
diff --git a/mojo/android/system/src/org/chromium/mojo/system/impl/WatcherImpl.java b/mojo/android/system/src/org/chromium/mojo/system/impl/WatcherImpl.java
new file mode 100644
index 0000000000..094ad90265
--- /dev/null
+++ b/mojo/android/system/src/org/chromium/mojo/system/impl/WatcherImpl.java
@@ -0,0 +1,63 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.mojo.system.impl;
+
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
+import org.chromium.mojo.system.Core;
+import org.chromium.mojo.system.Handle;
+import org.chromium.mojo.system.MojoResult;
+import org.chromium.mojo.system.Watcher;
+
+@JNINamespace("mojo::android")
+class WatcherImpl implements Watcher {
+ private long mImplPtr = nativeCreateWatcher();
+ private Callback mCallback;
+
+ @Override
+ public int start(Handle handle, Core.HandleSignals signals, Callback callback) {
+ if (mImplPtr == 0) {
+ return MojoResult.INVALID_ARGUMENT;
+ }
+ if (!(handle instanceof HandleBase)) {
+ return MojoResult.INVALID_ARGUMENT;
+ }
+ int result =
+ nativeStart(mImplPtr, ((HandleBase) handle).getMojoHandle(), signals.getFlags());
+ if (result == MojoResult.OK) mCallback = callback;
+ return result;
+ }
+
+ @Override
+ public void cancel() {
+ if (mImplPtr == 0) {
+ return;
+ }
+ mCallback = null;
+ nativeCancel(mImplPtr);
+ }
+
+ @Override
+ public void destroy() {
+ if (mImplPtr == 0) {
+ return;
+ }
+ nativeDelete(mImplPtr);
+ mImplPtr = 0;
+ }
+
+ @CalledByNative
+ private void onHandleReady(int result) {
+ mCallback.onResult(result);
+ }
+
+ private native long nativeCreateWatcher();
+
+ private native int nativeStart(long implPtr, int mojoHandle, int flags);
+
+ private native void nativeCancel(long implPtr);
+
+ private native void nativeDelete(long implPtr);
+}