Loading src/java/com/android/internal/telephony/uicc/euicc/EuiccCard.java +5 −2 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ public class EuiccCard extends UiccCard { // Device capabilities. private static final String DEV_CAP_GSM = "gsm"; private static final String DEV_CAP_UTRAN = "utran"; private static final String DEV_CAP_CDMA_1X = "cdma_1x"; private static final String DEV_CAP_CDMA_1X = "cdma1x"; private static final String DEV_CAP_HRPD = "hrpd"; private static final String DEV_CAP_EHRPD = "ehrpd"; private static final String DEV_CAP_EUTRAN = "eutran"; Loading Loading @@ -234,7 +234,10 @@ public class EuiccCard extends UiccCard { sendApdu( newRequestProvider((RequestBuilder requestBuilder) -> requestBuilder.addStoreData(Asn1Node.newBuilder(Tags.TAG_GET_PROFILES) .addChildAsBytes(Tags.TAG_ICCID, IccUtils.bcdToBytes(iccid)) .addChild(Asn1Node.newBuilder(Tags.TAG_CTX_COMP_0) .addChildAsBytes( Tags.TAG_ICCID, IccUtils.bcdToBytes(padTrailingFs(iccid))) .build()) .addChildAsBytes(Tags.TAG_TAG_LIST, Tags.EUICC_PROFILE_TAGS) .build().toHex())), (byte[] response) -> { Loading src/java/com/android/internal/telephony/uicc/euicc/apdu/ApduSender.java +6 −4 Original line number Diff line number Diff line Loading @@ -198,11 +198,13 @@ public class ApduSender { Handler handler) { ByteArrayOutputStream resultBuilder = responseBuilder == null ? new ByteArrayOutputStream() : responseBuilder; if (lastResponse.payload != null) { try { resultBuilder.write(lastResponse.payload); } catch (IOException e) { // Should never reach here. } } if (lastResponse.sw1 != SW1_MORE_RESPONSE) { lastResponse.payload = resultBuilder.toByteArray(); resultCallback.onResult(lastResponse); Loading src/java/com/android/internal/telephony/uicc/euicc/apdu/RequestBuilder.java +2 −4 Original line number Diff line number Diff line Loading @@ -81,13 +81,11 @@ public class RequestBuilder { int totalSubCmds = totalLen == 0 ? 1 : (totalLen + mMaxApduDataLen - 1) / mMaxApduDataLen; for (int i = 1; i < totalSubCmds; ++i) { String data = cmdHex.substring(startPos, startPos + cmdLen); addApdu(CLA_STORE_DATA, INS_STORE_DATA, P1_STORE_DATA_INTERM, i - 1, mMaxApduDataLen, data); addApdu(CLA_STORE_DATA, INS_STORE_DATA, P1_STORE_DATA_INTERM, i - 1, data); startPos += cmdLen; } String data = cmdHex.substring(startPos); addApdu(CLA_STORE_DATA, INS_STORE_DATA, P1_STORE_DATA_END, totalSubCmds - 1, totalLen % mMaxApduDataLen, data); addApdu(CLA_STORE_DATA, INS_STORE_DATA, P1_STORE_DATA_END, totalSubCmds - 1, data); } List<ApduCommand> getCommands() { Loading src/java/com/android/internal/telephony/uicc/euicc/async/AsyncResultCallback.java +7 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.internal.telephony.uicc.euicc.async; import android.telephony.Rlog; /** * Class to deliver the returned value from an asynchronous call. Either {@link #onResult(Result)} * or {@link #onException(Throwable)} will be called. You can create an anonymous subclass and Loading @@ -38,9 +40,13 @@ package com.android.internal.telephony.uicc.euicc.async; */ public abstract class AsyncResultCallback<Result> { private static final String LOG_TAG = "AsyncResultCallback"; /** This will be called when the result is returned. */ public abstract void onResult(Result result); /** This will be called when any exception is thrown. */ public void onException(Throwable e) {} public void onException(Throwable e) { Rlog.e(LOG_TAG, "Error in onException", e); } } tests/telephonytests/src/com/android/internal/telephony/uicc/euicc/EuiccCardTest.java +5 −5 Original line number Diff line number Diff line Loading @@ -274,7 +274,7 @@ public class EuiccCardTest extends TelephonyTest { "com.google.android.apps.myapp", 1) }, profile.getUiccAccessRules().toArray()); verifyStoreData(channel, "BF2D195A0A896700000000004523015C0B5A909192B79F709599BF76"); verifyStoreData(channel, "BF2D1BA00C5A0A896700000000004523015C0B5A909192B79F709599BF76"); } @Test Loading Loading @@ -608,11 +608,11 @@ public class EuiccCardTest extends TelephonyTest { assertUnexpectedException(resultCaptor.exception); assertEquals("BF3802A000", IccUtils.bytesToHexString(resultCaptor.result)); verifyStoreData(channel, "BF3846" + "A000" + "A100" + "A200" + "A300" + "A03C" "BF384B" + "A000" + "A100" + "A200" + "A300" + "A041" + "800D4131423243332D583459355A36" // Matching id + "A12B800489674523" // TAC + "A130800489674523" // TAC // Device capabilities + "A11980030B000081030B0000830303000084030C000085030B0000" + "A11E80030B000081030B00008203010000830303000084030C000085030B0000" + "82088967452301214305"); // IMEI } Loading Loading @@ -927,7 +927,7 @@ public class EuiccCardTest extends TelephonyTest { child = node.getChild(Tags.TAG_CTX_1); assertTrue(Arrays.equals(new byte[] {11, 0 , 0}, child.asBytes())); devCapItem = "cdma_1x,1"; devCapItem = "cdma1x,1"; mEuiccCard.addDeviceCapability(devCapsBuilder, devCapItem); node = devCapsBuilder.build(); Loading Loading
src/java/com/android/internal/telephony/uicc/euicc/EuiccCard.java +5 −2 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ public class EuiccCard extends UiccCard { // Device capabilities. private static final String DEV_CAP_GSM = "gsm"; private static final String DEV_CAP_UTRAN = "utran"; private static final String DEV_CAP_CDMA_1X = "cdma_1x"; private static final String DEV_CAP_CDMA_1X = "cdma1x"; private static final String DEV_CAP_HRPD = "hrpd"; private static final String DEV_CAP_EHRPD = "ehrpd"; private static final String DEV_CAP_EUTRAN = "eutran"; Loading Loading @@ -234,7 +234,10 @@ public class EuiccCard extends UiccCard { sendApdu( newRequestProvider((RequestBuilder requestBuilder) -> requestBuilder.addStoreData(Asn1Node.newBuilder(Tags.TAG_GET_PROFILES) .addChildAsBytes(Tags.TAG_ICCID, IccUtils.bcdToBytes(iccid)) .addChild(Asn1Node.newBuilder(Tags.TAG_CTX_COMP_0) .addChildAsBytes( Tags.TAG_ICCID, IccUtils.bcdToBytes(padTrailingFs(iccid))) .build()) .addChildAsBytes(Tags.TAG_TAG_LIST, Tags.EUICC_PROFILE_TAGS) .build().toHex())), (byte[] response) -> { Loading
src/java/com/android/internal/telephony/uicc/euicc/apdu/ApduSender.java +6 −4 Original line number Diff line number Diff line Loading @@ -198,11 +198,13 @@ public class ApduSender { Handler handler) { ByteArrayOutputStream resultBuilder = responseBuilder == null ? new ByteArrayOutputStream() : responseBuilder; if (lastResponse.payload != null) { try { resultBuilder.write(lastResponse.payload); } catch (IOException e) { // Should never reach here. } } if (lastResponse.sw1 != SW1_MORE_RESPONSE) { lastResponse.payload = resultBuilder.toByteArray(); resultCallback.onResult(lastResponse); Loading
src/java/com/android/internal/telephony/uicc/euicc/apdu/RequestBuilder.java +2 −4 Original line number Diff line number Diff line Loading @@ -81,13 +81,11 @@ public class RequestBuilder { int totalSubCmds = totalLen == 0 ? 1 : (totalLen + mMaxApduDataLen - 1) / mMaxApduDataLen; for (int i = 1; i < totalSubCmds; ++i) { String data = cmdHex.substring(startPos, startPos + cmdLen); addApdu(CLA_STORE_DATA, INS_STORE_DATA, P1_STORE_DATA_INTERM, i - 1, mMaxApduDataLen, data); addApdu(CLA_STORE_DATA, INS_STORE_DATA, P1_STORE_DATA_INTERM, i - 1, data); startPos += cmdLen; } String data = cmdHex.substring(startPos); addApdu(CLA_STORE_DATA, INS_STORE_DATA, P1_STORE_DATA_END, totalSubCmds - 1, totalLen % mMaxApduDataLen, data); addApdu(CLA_STORE_DATA, INS_STORE_DATA, P1_STORE_DATA_END, totalSubCmds - 1, data); } List<ApduCommand> getCommands() { Loading
src/java/com/android/internal/telephony/uicc/euicc/async/AsyncResultCallback.java +7 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.internal.telephony.uicc.euicc.async; import android.telephony.Rlog; /** * Class to deliver the returned value from an asynchronous call. Either {@link #onResult(Result)} * or {@link #onException(Throwable)} will be called. You can create an anonymous subclass and Loading @@ -38,9 +40,13 @@ package com.android.internal.telephony.uicc.euicc.async; */ public abstract class AsyncResultCallback<Result> { private static final String LOG_TAG = "AsyncResultCallback"; /** This will be called when the result is returned. */ public abstract void onResult(Result result); /** This will be called when any exception is thrown. */ public void onException(Throwable e) {} public void onException(Throwable e) { Rlog.e(LOG_TAG, "Error in onException", e); } }
tests/telephonytests/src/com/android/internal/telephony/uicc/euicc/EuiccCardTest.java +5 −5 Original line number Diff line number Diff line Loading @@ -274,7 +274,7 @@ public class EuiccCardTest extends TelephonyTest { "com.google.android.apps.myapp", 1) }, profile.getUiccAccessRules().toArray()); verifyStoreData(channel, "BF2D195A0A896700000000004523015C0B5A909192B79F709599BF76"); verifyStoreData(channel, "BF2D1BA00C5A0A896700000000004523015C0B5A909192B79F709599BF76"); } @Test Loading Loading @@ -608,11 +608,11 @@ public class EuiccCardTest extends TelephonyTest { assertUnexpectedException(resultCaptor.exception); assertEquals("BF3802A000", IccUtils.bytesToHexString(resultCaptor.result)); verifyStoreData(channel, "BF3846" + "A000" + "A100" + "A200" + "A300" + "A03C" "BF384B" + "A000" + "A100" + "A200" + "A300" + "A041" + "800D4131423243332D583459355A36" // Matching id + "A12B800489674523" // TAC + "A130800489674523" // TAC // Device capabilities + "A11980030B000081030B0000830303000084030C000085030B0000" + "A11E80030B000081030B00008203010000830303000084030C000085030B0000" + "82088967452301214305"); // IMEI } Loading Loading @@ -927,7 +927,7 @@ public class EuiccCardTest extends TelephonyTest { child = node.getChild(Tags.TAG_CTX_1); assertTrue(Arrays.equals(new byte[] {11, 0 , 0}, child.asBytes())); devCapItem = "cdma_1x,1"; devCapItem = "cdma1x,1"; mEuiccCard.addDeviceCapability(devCapsBuilder, devCapItem); node = devCapsBuilder.build(); Loading