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

Commit 0d27f999 authored by Martijn Coenen's avatar Martijn Coenen Committed by Jeff Hamilton
Browse files

Expose reconnect(), to allow applications to reset tag state.

Change-Id: Ib5432e7f6b6aaf6ec1cb06693592cb7c6440a6f8
parent 4049f9d0
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -164,6 +164,40 @@ import android.util.Log;
            }
        } catch (RemoteException e) {
            attemptDeadServiceRecovery(e);
            throw new IOException("NFC service died");
        }
    }

    /**
     * Re-connect to the {@link Tag} associated with this connection.
     * <p>
     * Reconnecting to a tag can be used to reset the state of the tag itself.
     * This method blocks until the connection is re-established.
     * <p>
     * {@link #close} can be called from another thread to cancel this connection
     * attempt.
     * <p>Requires {@link android.Manifest.permission#NFC} permission.
     * @throws IOException if the target is lost, or connect canceled
     */
    @Override
    public void reconnect() throws IOException {
        if (!mIsConnected) {
            throw new IllegalStateException("Technology not connected yet");
        } else {
            try {
                int errorCode = mTagService.reconnect(mTag.getServiceHandle());

                if (errorCode != ErrorCodes.SUCCESS) {
                    mIsConnected = false;
                    mTag.setTechnologyDisconnected();
                    throw new IOException();
                }
            } catch (RemoteException e) {
                mIsConnected = false;
                mTag.setTechnologyDisconnected();
                attemptDeadServiceRecovery(e);
                throw new IOException("NFC service died");
            }
        }
    }

+5 −0
Original line number Diff line number Diff line
@@ -81,6 +81,11 @@ public interface TagTechnology {
     */
    public void connect() throws IOException;

    /**
     * @throws IOException
     */
    public void reconnect() throws IOException;

    /**
     * Non-blocking. Immediately causes all blocking calls
     * to throw IOException.