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

Commit 0d225be6 authored by Alisher Alikhodjaev's avatar Alisher Alikhodjaev Committed by Gerrit Code Review
Browse files

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

parents 027bf28b 4f44abe8
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);
                }
            }
        }
    }
}