Merge "New system api to get UICC terminal based on slot number"
am: 0d225be680
Change-Id: Ic8cbf5d79638354d913362039a0a4166d2b86ba1
This commit is contained in:
@@ -40921,6 +40921,7 @@ package android.se.omapi {
|
||||
public final class SEService {
|
||||
ctor public SEService(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.se.omapi.SEService.OnConnectedListener);
|
||||
method @NonNull public android.se.omapi.Reader[] getReaders();
|
||||
method @NonNull public android.se.omapi.Reader getUiccReader(int);
|
||||
method @NonNull public String getVersion();
|
||||
method public boolean isConnected();
|
||||
method public void shutdown();
|
||||
|
||||
@@ -98,6 +98,8 @@ public final class SEService {
|
||||
|
||||
private static final String TAG = "OMAPI.SEService";
|
||||
|
||||
private static final String UICC_TERMINAL = "SIM";
|
||||
|
||||
private final Object mLock = new Object();
|
||||
|
||||
/** The client context (e.g. activity). */
|
||||
@@ -190,32 +192,33 @@ public final class SEService {
|
||||
* is of length 0.
|
||||
*/
|
||||
public @NonNull Reader[] getReaders() {
|
||||
if (mSecureElementService == null) {
|
||||
throw new IllegalStateException("service not connected to system");
|
||||
}
|
||||
String[] readerNames;
|
||||
try {
|
||||
readerNames = mSecureElementService.getReaders();
|
||||
} catch (RemoteException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
loadReaders();
|
||||
|
||||
Reader[] readers = new Reader[readerNames.length];
|
||||
int i = 0;
|
||||
for (String readerName : readerNames) {
|
||||
if (mReaders.get(readerName) == null) {
|
||||
try {
|
||||
mReaders.put(readerName, new Reader(this, readerName,
|
||||
getReader(readerName)));
|
||||
readers[i++] = mReaders.get(readerName);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Error adding Reader: " + readerName, e);
|
||||
}
|
||||
} else {
|
||||
readers[i++] = mReaders.get(readerName);
|
||||
}
|
||||
}
|
||||
return readers;
|
||||
return mReaders.values().toArray(new Reader[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtain a UICC Reader instance with specific slot number from the SecureElementService
|
||||
*
|
||||
* @param slotNumber The index of the uicc slot. The index starts from 1.
|
||||
* @throws IllegalArgumentException if the reader object corresponding to the uiccSlotNumber
|
||||
* is not exist.
|
||||
* @return A Reader object for this uicc slot.
|
||||
*/
|
||||
public @NonNull Reader getUiccReader(int slotNumber) {
|
||||
if (slotNumber < 1) {
|
||||
throw new IllegalArgumentException("slotNumber should be larger than 0");
|
||||
}
|
||||
loadReaders();
|
||||
|
||||
String readerName = UICC_TERMINAL + slotNumber;
|
||||
Reader reader = mReaders.get(readerName);
|
||||
|
||||
if (reader == null) {
|
||||
throw new IllegalArgumentException("Reader:" + readerName + " doesn't exist");
|
||||
}
|
||||
|
||||
return reader;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -270,4 +273,30 @@ public final class SEService {
|
||||
throw new IllegalStateException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load available Secure Element Readers
|
||||
*/
|
||||
private void loadReaders() {
|
||||
if (mSecureElementService == null) {
|
||||
throw new IllegalStateException("service not connected to system");
|
||||
}
|
||||
String[] readerNames;
|
||||
try {
|
||||
readerNames = mSecureElementService.getReaders();
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowAsRuntimeException();
|
||||
}
|
||||
|
||||
for (String readerName : readerNames) {
|
||||
if (mReaders.get(readerName) == null) {
|
||||
try {
|
||||
mReaders.put(readerName, new Reader(this, readerName,
|
||||
getReader(readerName)));
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Error adding Reader: " + readerName, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user