summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/current.txt17
-rw-r--r--api/system-current.txt17
-rw-r--r--core/java/android/os/MessageQueue.java115
-rw-r--r--core/java/android/os/ParcelFileDescriptor.java12
4 files changed, 77 insertions, 84 deletions
diff --git a/api/current.txt b/api/current.txt
index d8bb56e..50147d8 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -23099,24 +23099,23 @@ package android.os {
public final class MessageQueue {
method public void addIdleHandler(android.os.MessageQueue.IdleHandler);
+ method public void addOnFileDescriptorEventListener(java.io.FileDescriptor, int, android.os.MessageQueue.OnFileDescriptorEventListener);
method public boolean isIdle();
- method public void registerFileDescriptorCallback(java.io.FileDescriptor, int, android.os.MessageQueue.FileDescriptorCallback);
method public void removeIdleHandler(android.os.MessageQueue.IdleHandler);
- method public void unregisterFileDescriptorCallback(java.io.FileDescriptor);
+ method public void removeOnFileDescriptorEventListener(java.io.FileDescriptor);
}
- public static abstract class MessageQueue.FileDescriptorCallback {
- ctor public MessageQueue.FileDescriptorCallback();
- method public int onFileDescriptorEvents(java.io.FileDescriptor, int);
+ public static abstract interface MessageQueue.IdleHandler {
+ method public abstract boolean queueIdle();
+ }
+
+ public static abstract interface MessageQueue.OnFileDescriptorEventListener {
+ method public abstract int onFileDescriptorEvents(java.io.FileDescriptor, int);
field public static final int EVENT_ERROR = 4; // 0x4
field public static final int EVENT_INPUT = 1; // 0x1
field public static final int EVENT_OUTPUT = 2; // 0x2
}
- public static abstract interface MessageQueue.IdleHandler {
- method public abstract boolean queueIdle();
- }
-
public final class Messenger implements android.os.Parcelable {
ctor public Messenger(android.os.Handler);
ctor public Messenger(android.os.IBinder);
diff --git a/api/system-current.txt b/api/system-current.txt
index cd290ec..d2e0556 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -25013,24 +25013,23 @@ package android.os {
public final class MessageQueue {
method public void addIdleHandler(android.os.MessageQueue.IdleHandler);
+ method public void addOnFileDescriptorEventListener(java.io.FileDescriptor, int, android.os.MessageQueue.OnFileDescriptorEventListener);
method public boolean isIdle();
- method public void registerFileDescriptorCallback(java.io.FileDescriptor, int, android.os.MessageQueue.FileDescriptorCallback);
method public void removeIdleHandler(android.os.MessageQueue.IdleHandler);
- method public void unregisterFileDescriptorCallback(java.io.FileDescriptor);
+ method public void removeOnFileDescriptorEventListener(java.io.FileDescriptor);
}
- public static abstract class MessageQueue.FileDescriptorCallback {
- ctor public MessageQueue.FileDescriptorCallback();
- method public int onFileDescriptorEvents(java.io.FileDescriptor, int);
+ public static abstract interface MessageQueue.IdleHandler {
+ method public abstract boolean queueIdle();
+ }
+
+ public static abstract interface MessageQueue.OnFileDescriptorEventListener {
+ method public abstract int onFileDescriptorEvents(java.io.FileDescriptor, int);
field public static final int EVENT_ERROR = 4; // 0x4
field public static final int EVENT_INPUT = 1; // 0x1
field public static final int EVENT_OUTPUT = 2; // 0x2
}
- public static abstract interface MessageQueue.IdleHandler {
- method public abstract boolean queueIdle();
- }
-
public final class Messenger implements android.os.Parcelable {
ctor public Messenger(android.os.Handler);
ctor public Messenger(android.os.IBinder);
diff --git a/core/java/android/os/MessageQueue.java b/core/java/android/os/MessageQueue.java
index 7dd4f94..4f2e968 100644
--- a/core/java/android/os/MessageQueue.java
+++ b/core/java/android/os/MessageQueue.java
@@ -160,67 +160,67 @@ public final class MessageQueue {
}
/**
- * Registers a file descriptor callback to receive notification when file descriptor
+ * Adds a file descriptor listener to receive notification when file descriptor
* related events occur.
* <p>
* If the file descriptor has already been registered, the specified events
- * and callback will replace any that were previously associated with it.
- * It is not possible to set more than one callback per file descriptor.
+ * and listener will replace any that were previously associated with it.
+ * It is not possible to set more than one listener per file descriptor.
* </p><p>
- * It is important to always unregister the callback when the file descriptor
+ * It is important to always unregister the listener when the file descriptor
* is no longer of use.
* </p>
*
- * @param fd The file descriptor for which a callback will be registered.
+ * @param fd The file descriptor for which a listener will be registered.
* @param events The set of events to receive: a combination of the
- * {@link FileDescriptorCallback#EVENT_INPUT},
- * {@link FileDescriptorCallback#EVENT_OUTPUT}, and
- * {@link FileDescriptorCallback#EVENT_ERROR} event masks. If the requested
- * set of events is zero, then the callback is unregistered.
- * @param callback The callback to invoke when file descriptor events occur.
+ * {@link OnFileDescriptorEventListener#EVENT_INPUT},
+ * {@link OnFileDescriptorEventListener#EVENT_OUTPUT}, and
+ * {@link OnFileDescriptorEventListener#EVENT_ERROR} event masks. If the requested
+ * set of events is zero, then the listener is unregistered.
+ * @param listener The listener to invoke when file descriptor events occur.
*
- * @see FileDescriptorCallback
- * @see #unregisterFileDescriptorCallback
+ * @see OnFileDescriptorEventListener
+ * @see #removeOnFileDescriptorEventListener
*/
- public void registerFileDescriptorCallback(@NonNull FileDescriptor fd,
- @FileDescriptorCallback.Events int events,
- @NonNull FileDescriptorCallback callback) {
+ public void addOnFileDescriptorEventListener(@NonNull FileDescriptor fd,
+ @OnFileDescriptorEventListener.Events int events,
+ @NonNull OnFileDescriptorEventListener listener) {
if (fd == null) {
throw new IllegalArgumentException("fd must not be null");
}
- if (callback == null) {
- throw new IllegalArgumentException("callback must not be null");
+ if (listener == null) {
+ throw new IllegalArgumentException("listener must not be null");
}
synchronized (this) {
- setFileDescriptorCallbackLocked(fd, events, callback);
+ updateOnFileDescriptorEventListenerLocked(fd, events, listener);
}
}
/**
- * Unregisters a file descriptor callback.
+ * Removes a file descriptor listener.
* <p>
- * This method does nothing if no callback has been registered for the
+ * This method does nothing if no listener has been registered for the
* specified file descriptor.
* </p>
*
- * @param fd The file descriptor whose callback will be unregistered.
+ * @param fd The file descriptor whose listener will be unregistered.
*
- * @see FileDescriptorCallback
- * @see #registerFileDescriptorCallback
+ * @see OnFileDescriptorEventListener
+ * @see #addOnFileDescriptorEventListener
*/
- public void unregisterFileDescriptorCallback(@NonNull FileDescriptor fd) {
+ public void removeOnFileDescriptorEventListener(@NonNull FileDescriptor fd) {
if (fd == null) {
throw new IllegalArgumentException("fd must not be null");
}
synchronized (this) {
- setFileDescriptorCallbackLocked(fd, 0, null);
+ updateOnFileDescriptorEventListenerLocked(fd, 0, null);
}
}
- private void setFileDescriptorCallbackLocked(FileDescriptor fd, int events,
- FileDescriptorCallback callback) {
+ private void updateOnFileDescriptorEventListenerLocked(FileDescriptor fd, int events,
+ OnFileDescriptorEventListener listener) {
final int fdNum = fd.getInt$();
int index = -1;
@@ -236,15 +236,15 @@ public final class MessageQueue {
}
if (events != 0) {
- events |= FileDescriptorCallback.EVENT_ERROR;
+ events |= OnFileDescriptorEventListener.EVENT_ERROR;
if (record == null) {
if (mFileDescriptorRecords == null) {
mFileDescriptorRecords = new SparseArray<FileDescriptorRecord>();
}
- record = new FileDescriptorRecord(fd, events, callback);
+ record = new FileDescriptorRecord(fd, events, listener);
mFileDescriptorRecords.put(fdNum, record);
} else {
- record.mCallback = callback;
+ record.mListener = listener;
record.mEvents = events;
record.mSeq += 1;
}
@@ -260,12 +260,12 @@ public final class MessageQueue {
// Get the file descriptor record and any state that might change.
final FileDescriptorRecord record;
final int oldWatchedEvents;
- final FileDescriptorCallback callback;
+ final OnFileDescriptorEventListener listener;
final int seq;
synchronized (this) {
record = mFileDescriptorRecords.get(fd);
if (record == null) {
- return 0; // spurious, no callback registered
+ return 0; // spurious, no listener registered
}
oldWatchedEvents = record.mEvents;
@@ -274,19 +274,19 @@ public final class MessageQueue {
return oldWatchedEvents; // spurious, watched events changed
}
- callback = record.mCallback;
+ listener = record.mListener;
seq = record.mSeq;
}
- // Invoke the callback outside of the lock.
- int newWatchedEvents = callback.onFileDescriptorEvents(
+ // Invoke the listener outside of the lock.
+ int newWatchedEvents = listener.onFileDescriptorEvents(
record.mDescriptor, events);
if (newWatchedEvents != 0) {
- newWatchedEvents |= FileDescriptorCallback.EVENT_ERROR;
+ newWatchedEvents |= OnFileDescriptorEventListener.EVENT_ERROR;
}
- // Update the file descriptor record if the callback changed the set of
- // events to watch and the callback itself hasn't been updated since.
+ // Update the file descriptor record if the listener changed the set of
+ // events to watch and the listener itself hasn't been updated since.
if (newWatchedEvents != oldWatchedEvents) {
synchronized (this) {
int index = mFileDescriptorRecords.indexOfKey(fd);
@@ -786,23 +786,23 @@ public final class MessageQueue {
}
/**
- * A callback which is invoked when file descriptor related events occur.
+ * A listener which is invoked when file descriptor related events occur.
*/
- public static abstract class FileDescriptorCallback {
+ public interface OnFileDescriptorEventListener {
/**
* File descriptor event: Indicates that the file descriptor is ready for input
* operations, such as reading.
* <p>
- * The callback should read all available data from the file descriptor
- * then return <code>true</code> to keep the callback active or <code>false</code>
- * to remove the callback.
+ * The listener should read all available data from the file descriptor
+ * then return <code>true</code> to keep the listener active or <code>false</code>
+ * to remove the listener.
* </p><p>
* In the case of a socket, this event may be generated to indicate
- * that there is at least one incoming connection that the callback
+ * that there is at least one incoming connection that the listener
* should accept.
* </p><p>
* This event will only be generated if the {@link #EVENT_INPUT} event mask was
- * specified when the callback was added.
+ * specified when the listener was added.
* </p>
*/
public static final int EVENT_INPUT = 1 << 0;
@@ -811,14 +811,14 @@ public final class MessageQueue {
* File descriptor event: Indicates that the file descriptor is ready for output
* operations, such as writing.
* <p>
- * The callback should write as much data as it needs. If it could not
+ * The listener should write as much data as it needs. If it could not
* write everything at once, then it should return <code>true</code> to
- * keep the callback active. Otherwise, it should return <code>false</code>
- * to remove the callback then re-register it later when it needs to write
+ * keep the listener active. Otherwise, it should return <code>false</code>
+ * to remove the listener then re-register it later when it needs to write
* something else.
* </p><p>
* This event will only be generated if the {@link #EVENT_OUTPUT} event mask was
- * specified when the callback was added.
+ * specified when the listener was added.
* </p>
*/
public static final int EVENT_OUTPUT = 1 << 1;
@@ -831,7 +831,7 @@ public final class MessageQueue {
* is when the remote peer of a socket or pipe closes its end of the connection.
* </p><p>
* This event may be generated at any time regardless of whether the
- * {@link #EVENT_ERROR} event mask was specified when the callback was added.
+ * {@link #EVENT_ERROR} event mask was specified when the listener was added.
* </p>
*/
public static final int EVENT_ERROR = 1 << 2;
@@ -843,35 +843,30 @@ public final class MessageQueue {
/**
* Called when a file descriptor receives events.
- * <p>
- * The default implementation does nothing and returns 0 to unregister the callback.
- * </p>
*
* @param fd The file descriptor.
* @param events The set of events that occurred: a combination of the
* {@link #EVENT_INPUT}, {@link #EVENT_OUTPUT}, and {@link #EVENT_ERROR} event masks.
- * @return The new set of events to watch, or 0 to unregister the callback.
+ * @return The new set of events to watch, or 0 to unregister the listener.
*
* @see #EVENT_INPUT
* @see #EVENT_OUTPUT
* @see #EVENT_ERROR
*/
- public @Events int onFileDescriptorEvents(@NonNull FileDescriptor fd, @Events int events) {
- return 0;
- }
+ @Events int onFileDescriptorEvents(@NonNull FileDescriptor fd, @Events int events);
}
private static final class FileDescriptorRecord {
public final FileDescriptor mDescriptor;
public int mEvents;
- public FileDescriptorCallback mCallback;
+ public OnFileDescriptorEventListener mListener;
public int mSeq;
public FileDescriptorRecord(FileDescriptor descriptor,
- int events, FileDescriptorCallback callback) {
+ int events, OnFileDescriptorEventListener listener) {
mDescriptor = descriptor;
mEvents = events;
- mCallback = callback;
+ mListener = listener;
}
}
}
diff --git a/core/java/android/os/ParcelFileDescriptor.java b/core/java/android/os/ParcelFileDescriptor.java
index 5b26304..c24f3fe 100644
--- a/core/java/android/os/ParcelFileDescriptor.java
+++ b/core/java/android/os/ParcelFileDescriptor.java
@@ -25,7 +25,7 @@ import static android.system.OsConstants.S_ISREG;
import android.content.BroadcastReceiver;
import android.content.ContentProvider;
-import android.os.MessageQueue.FileDescriptorCallback;
+import android.os.MessageQueue.OnFileDescriptorEventListener;
import android.system.ErrnoException;
import android.system.Os;
import android.system.OsConstants;
@@ -236,19 +236,19 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
final FileDescriptor[] comm = createCommSocketPair();
final ParcelFileDescriptor pfd = new ParcelFileDescriptor(fd, comm[0]);
final MessageQueue queue = handler.getLooper().getQueue();
- queue.registerFileDescriptorCallback(comm[1],
- FileDescriptorCallback.EVENT_INPUT, new FileDescriptorCallback() {
+ queue.addOnFileDescriptorEventListener(comm[1],
+ OnFileDescriptorEventListener.EVENT_INPUT, new OnFileDescriptorEventListener() {
@Override
public int onFileDescriptorEvents(FileDescriptor fd, int events) {
Status status = null;
- if ((events & FileDescriptorCallback.EVENT_INPUT) != 0) {
+ if ((events & OnFileDescriptorEventListener.EVENT_INPUT) != 0) {
final byte[] buf = new byte[MAX_STATUS];
status = readCommStatus(fd, buf);
- } else if ((events & FileDescriptorCallback.EVENT_ERROR) != 0) {
+ } else if ((events & OnFileDescriptorEventListener.EVENT_ERROR) != 0) {
status = new Status(Status.DEAD);
}
if (status != null) {
- queue.unregisterFileDescriptorCallback(fd);
+ queue.removeOnFileDescriptorEventListener(fd);
IoUtils.closeQuietly(fd);
listener.onClose(status.asIOException());
return 0;