Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f9fd33f authored by Amith Yamasani's avatar Amith Yamasani Committed by Android Git Automerger
Browse files

am e8c01ddb: Merge "Changes to PFD based on API review" into klp-dev

* commit 'e8c01ddb':
  Changes to PFD based on API review
parents 8ac0d137 e8c01ddb
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -18327,7 +18327,7 @@ package android.os {
    ctor public ParcelFileDescriptor(android.os.ParcelFileDescriptor);
    method public static android.os.ParcelFileDescriptor adoptFd(int);
    method public boolean canDetectErrors();
    method public void checkError(boolean) throws java.io.IOException;
    method public void checkError() throws java.io.IOException;
    method public void close() throws java.io.IOException;
    method public void closeWithError(java.lang.String) throws java.io.IOException;
    method public static android.os.ParcelFileDescriptor[] createPipe() throws java.io.IOException;
@@ -18366,8 +18366,12 @@ package android.os {
    ctor public ParcelFileDescriptor.AutoCloseOutputStream(android.os.ParcelFileDescriptor);
  }
  public static class ParcelFileDescriptor.FileDescriptorDetachedException extends java.io.IOException {
    ctor public ParcelFileDescriptor.FileDescriptorDetachedException();
  }
  public static abstract interface ParcelFileDescriptor.OnCloseListener {
    method public abstract void onClose(java.io.IOException, boolean);
    method public abstract void onClose(java.io.IOException);
  }
  public class ParcelFormatException extends java.lang.RuntimeException {
+32 −27
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
    private byte[] mStatusBuf;

    /**
     * Status read by {@link #checkError(boolean)}, or null if not read yet.
     * Status read by {@link #checkError()}, or null if not read yet.
     */
    private Status mStatus;

@@ -371,7 +371,7 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
     * <p>
     * The write end has the ability to deliver an error message through
     * {@link #closeWithError(String)} which can be handled by the read end
     * calling {@link #checkError(boolean)}, usually after detecting an EOF.
     * calling {@link #checkError()}, usually after detecting an EOF.
     * This can also be used to detect remote crashes.
     */
    public static ParcelFileDescriptor[] createReliablePipe() throws IOException {
@@ -409,7 +409,7 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
     * <p>
     * Both ends have the ability to deliver an error message through
     * {@link #closeWithError(String)} which can be detected by the other end
     * calling {@link #checkError(boolean)}, usually after detecting an EOF.
     * calling {@link #checkError()}, usually after detecting an EOF.
     * This can also be used to detect remote crashes.
     */
    public static ParcelFileDescriptor[] createReliableSocketPair() throws IOException {
@@ -698,7 +698,7 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
     * Indicates if this ParcelFileDescriptor can communicate and detect remote
     * errors/crashes.
     *
     * @see #checkError(boolean)
     * @see #checkError()
     */
    public boolean canDetectErrors() {
        if (mWrapped != null) {
@@ -716,17 +716,16 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
     * If this ParcelFileDescriptor is unable to detect remote errors, it will
     * return silently.
     *
     * @param throwIfDetached requests that an exception be thrown if the remote
     *            side called {@link #detachFd()}. Once detached, the remote
     * @throws IOException for normal errors.
     * @throws FileDescriptorDetachedException
     *            if the remote side called {@link #detachFd()}. Once detached, the remote
     *            side is unable to communicate any errors through
     *            {@link #closeWithError(String)}. An application may pass true
     *            if it needs a stronger guarantee that the stream was closed
     *            normally and was not merely detached.
     *            {@link #closeWithError(String)}.
     * @see #canDetectErrors()
     */
    public void checkError(boolean throwIfDetached) throws IOException {
    public void checkError() throws IOException {
        if (mWrapped != null) {
            mWrapped.checkError(throwIfDetached);
            mWrapped.checkError();
        } else {
            if (mStatus == null) {
                if (mCommFd == null) {
@@ -739,8 +738,7 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
                mStatus = readCommStatus(mCommFd, getOrCreateStatusBuffer());
            }

            if (mStatus == null || mStatus.status == Status.OK
                    || (mStatus.status == Status.DETACHED && !throwIfDetached)) {
            if (mStatus == null || mStatus.status == Status.OK) {
                // No status yet, or everything is peachy!
                return;
            } else {
@@ -885,13 +883,26 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
         * attached has been closed.
         *
         * @param e error state, or {@code null} if closed cleanly.
         * @param fromDetach indicates if close event was result of
         *            {@link ParcelFileDescriptor#detachFd()}. After detach the
         *        If the close event was the result of
         *        {@link ParcelFileDescriptor#detachFd()}, this will be a
         *        {@link FileDescriptorDetachedException}. After detach the
         *        remote side may continue reading/writing to the underlying
         *        {@link FileDescriptor}, but they can no longer deliver
         *        reliable close/error events.
         */
        public void onClose(IOException e, boolean fromDetach);
        public void onClose(IOException e);
    }

    /**
     * Exception that indicates that the file descriptor was detached.
     */
    public static class FileDescriptorDetachedException extends IOException {

        private static final long serialVersionUID = 0xDe7ac4edFdL;

        public FileDescriptorDetachedException() {
            super("Remote side is detached");
        }
    }

    /**
@@ -934,7 +945,7 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
                case ERROR:
                    return new IOException("Remote error: " + msg);
                case DETACHED:
                    return new IOException("Remote side is detached");
                    return new FileDescriptorDetachedException();
                case LEAKED:
                    return new IOException("Remote side was leaked");
                default:
@@ -959,13 +970,7 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
                @Override
                public void handleMessage(Message msg) {
                    final Status s = (Status) msg.obj;
                    if (s.status == Status.DETACHED) {
                        listener.onClose(null, true);
                    } else if (s.status == Status.OK) {
                        listener.onClose(null, false);
                    } else {
                        listener.onClose(s.asIOException(), false);
                    }
                    listener.onClose(s != null ? s.asIOException() : null);
                }
            };
        }