Merge "New system api to get UICC terminal based on slot number"

am: 0d225be680

Change-Id: Ic8cbf5d79638354d913362039a0a4166d2b86ba1
This commit is contained in:
Alisher Alikhodjaev
2020-01-17 18:09:59 -08:00
committed by android-build-merger
2 changed files with 55 additions and 25 deletions

View File

@@ -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();

View File

@@ -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);
}
}
}
}
}