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

Commit 43056194 authored by Ruchi Kandoi's avatar Ruchi Kandoi Committed by android-build-merger
Browse files

Merge "Make OMAPI stricter"

am: 998ef794

Change-Id: I34232eea503b3d95b22d4a8fa9e366c857264e78
parents f6ab9a5f 998ef794
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);
    }
}