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

Commit 998ef794 authored by Ruchi Kandoi's avatar Ruchi Kandoi Committed by Gerrit Code Review
Browse files

Merge "Make OMAPI stricter"

parents 34ce11f2 f0082409
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -37011,17 +37011,17 @@ package android.sax {
package android.se.omapi {
  public class Channel {
  public final class Channel implements java.nio.channels.Channel {
    method public void close();
    method public byte[] getSelectResponse();
    method public android.se.omapi.Session getSession();
    method public boolean isBasicChannel();
    method public boolean isClosed();
    method public boolean isOpen();
    method public boolean selectNext() throws java.io.IOException;
    method public byte[] transmit(byte[]) throws java.io.IOException;
  }
  public class Reader {
  public final class Reader {
    method public void closeSessions();
    method public java.lang.String getName();
    method public android.se.omapi.SEService getSEService();
@@ -37029,26 +37029,28 @@ package android.se.omapi {
    method public android.se.omapi.Session openSession() throws java.io.IOException;
  }
  public class SEService {
    ctor public SEService(android.content.Context, android.se.omapi.SEService.SecureElementListener);
  public final class SEService {
    ctor public SEService(android.content.Context, android.se.omapi.SEService.OnConnectedListener);
    method public android.se.omapi.Reader[] getReaders();
    method public java.lang.String getVersion();
    method public boolean isConnected();
    method public void shutdown();
  }
  public static abstract interface SEService.SecureElementListener {
  public static abstract interface SEService.OnConnectedListener {
    method public abstract void onServiceConnected();
  }
  public class Session {
  public final class Session {
    method public void close();
    method public void closeChannels();
    method public byte[] getATR();
    method public android.se.omapi.Reader getReader();
    method public boolean isClosed();
    method public android.se.omapi.Channel openBasicChannel(byte[], byte) throws java.io.IOException;
    method public android.se.omapi.Channel openBasicChannel(byte[]) throws java.io.IOException;
    method public android.se.omapi.Channel openLogicalChannel(byte[], byte) throws java.io.IOException;
    method public android.se.omapi.Channel openLogicalChannel(byte[]) throws java.io.IOException;
  }
}
+9 −9
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ import java.io.IOException;
 *
 * @see <a href="http://globalplatform.org">GlobalPlatform Open Mobile API</a>
 */
public class Channel {
public final class Channel implements java.nio.channels.Channel {

    private static final String TAG = "OMAPI.Channel";
    private Session mSession;
@@ -64,7 +64,7 @@ public class Channel {
     * before closing the channel.
     */
    public void close() {
        if (!isClosed()) {
        if (isOpen()) {
            synchronized (mLock) {
                try {
                    mChannel.close();
@@ -76,21 +76,21 @@ public class Channel {
    }

    /**
     * Tells if this channel is closed.
     * Tells if this channel is open.
     *
     * @return <code>true</code> if the channel is closed or in case of an error.
     *         <code>false</code> otherwise.
     * @return <code>false</code> if the channel is closed or in case of an error.
     *         <code>true</code> otherwise.
     */
    public boolean isClosed() {
    public boolean isOpen() {
        if (!mService.isConnected()) {
            Log.e(TAG, "service not connected to system");
            return true;
            return false;
        }
        try {
            return mChannel.isClosed();
            return !mChannel.isClosed();
        } catch (RemoteException e) {
            Log.e(TAG, "Exception in isClosed()");
            return true;
            return false;
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ import java.io.IOException;
 *
 * @see <a href="http://globalplatform.org">GlobalPlatform Open Mobile API</a>
 */
public class Reader {
public final class Reader {

    private static final String TAG = "OMAPI.Reader";
    private final String mName;
+10 −9
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ import java.util.HashMap;
 *
 * @see <a href="http://simalliance.org">SIMalliance Open Mobile API  v3.0</a>
 */
public class SEService {
public final class SEService {

    /**
     * Error code used with ServiceSpecificException.
@@ -62,7 +62,7 @@ public class SEService {
    /**
     * Interface to send call-backs to the application when the service is connected.
     */
    public interface SecureElementListener {
    public interface OnConnectedListener {
        /**
         * Called by the framework when the service is connected.
         */
@@ -74,7 +74,7 @@ public class SEService {
     * SEService could be bound to the backend.
     */
    private class SEListener extends ISecureElementListener.Stub {
        public SecureElementListener mListener = null;
        public OnConnectedListener mListener = null;

        @Override
        public IBinder asBinder() {
@@ -122,9 +122,9 @@ public class SEService {
     *            the context of the calling application. Cannot be
     *            <code>null</code>.
     * @param listener
     *            a SecureElementListener object.
     *            a OnConnectedListener object.
     */
    public SEService(@NonNull Context context, @NonNull SecureElementListener listener) {
    public SEService(@NonNull Context context, @NonNull OnConnectedListener listener) {

        if (context == null) {
            throw new NullPointerException("context must not be null");
@@ -171,12 +171,12 @@ public class SEService {
    }

    /**
     * Returns the list of available Secure Element readers.
     * Returns an array of available Secure Element readers.
     * There must be no duplicated objects in the returned list.
     * All available readers shall be listed even if no card is inserted.
     *
     * @return The readers list, as an array of Readers. If there are no
     * readers the returned array is of length 0.
     * @return An array of Readers. If there are no readers the returned array
     * is of length 0.
     */
    public @NonNull Reader[] getReaders() {
        if (mSecureElementService == null) {
@@ -212,7 +212,8 @@ public class SEService {
     * (including any binding to an underlying service).
     * As a result isConnected() will return false after shutdown() was called.
     * After this method call, the SEService object is not connected.
     * It is recommended to call this method in the termination method of the calling application
     * This method should be called when connection to the Secure Element is not needed
     * or in the termination method of the calling application
     * (or part of this application) which is bound to this SEService.
     */
    public void shutdown() {
+55 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ import java.util.NoSuchElementException;
 *
 * @see <a href="http://simalliance.org">SIMalliance Open Mobile API  v3.0</a>
 */
public class Session {
public final class Session {

    private final Object mLock = new Object();
    private final SEService mService;
@@ -224,6 +224,32 @@ public class Session {
        }
    }

    /**
     * This method is provided to ease the development of mobile application and for compliancy
     * with existing applications.
     * This method is equivalent to openBasicChannel(aid, P2=0x00)
     *
     * @param aid the AID of the Applet to be selected on this channel, as a
     *            byte array, or null if no Applet is to be selected.
     * @throws IOException if there is a communication problem to the reader or
     *             the Secure Element.
     * @throws IllegalStateException if the Secure Element session is used after
     *             being closed.
     * @throws IllegalArgumentException if the aid's length is not within 5 to
     *             16 (inclusive).
     * @throws SecurityException if the calling application cannot be granted
     *             access to this AID or the default Applet on this
     *             session.
     * @throws NoSuchElementException if the AID on the Secure Element is not available or cannot be
     *             selected.
     * @throws UnsupportedOperationException if the given P2 parameter is not
     *             supported by the device
     * @return an instance of Channel if available or null.
     */
    public @Nullable Channel openBasicChannel(@Nullable byte[] aid) throws IOException {
        return openBasicChannel(aid, (byte) 0x00);
    }

    /**
     * Open a logical channel with the Secure Element, selecting the Applet represented by
     * the given AID. If the AID is null, which means no Applet is to be selected on this
@@ -304,4 +330,32 @@ public class Session {
            }
        }
    }

    /**
     * This method is provided to ease the development of mobile application and for compliancy
     * with existing applications.
     * This method is equivalent to openLogicalChannel(aid, P2=0x00)
     *
     * @param aid the AID of the Applet to be selected on this channel, as a
     *            byte array.
     * @throws IOException if there is a communication problem to the reader or
     *             the Secure Element.
     * @throws IllegalStateException if the Secure Element is used after being
     *             closed.
     * @throws IllegalArgumentException if the aid's length is not within 5 to
     *             16 (inclusive).
     * @throws SecurityException if the calling application cannot be granted
     *             access to this AID or the default Applet on this
     *             session.
     * @throws NoSuchElementException if the AID on the Secure Element is not
     *             available or cannot be selected or a logical channel is already
     *             open to a non-multiselectable Applet.
     * @throws UnsupportedOperationException if the given P2 parameter is not
     *             supported by the device.
     * @return an instance of Channel. Null if the Secure Element is unable to
     *         provide a new logical channel.
     */
    public @Nullable Channel openLogicalChannel(@Nullable byte[] aid) throws IOException {
        return openLogicalChannel(aid, (byte) 0x00);
    }
}