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

Commit 7222dbc0 authored by Alisher Alikhodjaev's avatar Alisher Alikhodjaev Committed by android-build-merger
Browse files

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

am: 0d225be6

Change-Id: Ic8cbf5d79638354d913362039a0a4166d2b86ba1
parents 071427f6 0d225be6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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();
+54 −25
Original line number Diff line number Diff line
@@ -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);
        return mReaders.values().toArray(new Reader[0]);
    }
            } else {
                readers[i++] = mReaders.get(readerName);

    /**
      * 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 readers;

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