Merge "Make OMAPI stricter"
am: 998ef794a3
Change-Id: I34232eea503b3d95b22d4a8fa9e366c857264e78
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user