Browse Source

Show ICCID as little-endian string

We use ICCID as big-endian internally to match the eUICC chip itself,
but the user (and the OS) would prefer the little-endian representation.
Peter Cai 3 years ago
parent
commit
5756c48d3d

+ 1 - 1
app/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt

@@ -147,7 +147,7 @@ class EuiccManagementFragment : Fragment(), EuiccFragmentMarker, EuiccProfilesCh
                 }
                 }
             )
             )
             binding.provider.text = profile[PROVIDER_NAME.name]
             binding.provider.text = profile[PROVIDER_NAME.name]
-            binding.iccid.text = profile[ICCID.name]
+            binding.iccid.text = profile[ICCID_LITTLE.name]!!
             binding.iccid.transformationMethod = PasswordTransformationMethod.getInstance()
             binding.iccid.transformationMethod = PasswordTransformationMethod.getInstance()
         }
         }
 
 

+ 11 - 0
libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/impl/ListProfilesWorker.java

@@ -41,6 +41,7 @@ class ListProfilesWorker {
 
 
                 profileMap.put(ProfileKey.STATE.name(), LocalProfileAssistantImpl.DISABLED_STATE.equals(info.getProfileState().toString()) ? "Disabled" : "Enabled");
                 profileMap.put(ProfileKey.STATE.name(), LocalProfileAssistantImpl.DISABLED_STATE.equals(info.getProfileState().toString()) ? "Disabled" : "Enabled");
                 profileMap.put(ProfileKey.ICCID.name(), info.getIccid().toString());
                 profileMap.put(ProfileKey.ICCID.name(), info.getIccid().toString());
+                profileMap.put(ProfileKey.ICCID_LITTLE.name(), iccidBigToLittle(info.getIccid().toString()));
                 profileMap.put(ProfileKey.NAME.name(), (info.getProfileName()!=null)?info.getProfileName().toString():"");
                 profileMap.put(ProfileKey.NAME.name(), (info.getProfileName()!=null)?info.getProfileName().toString():"");
                 profileMap.put(ProfileKey.NICKNAME.name(), (info.getProfileNickname()!=null)?info.getProfileNickname().toString():"");
                 profileMap.put(ProfileKey.NICKNAME.name(), (info.getProfileNickname()!=null)?info.getProfileNickname().toString():"");
                 profileMap.put(ProfileKey.PROVIDER_NAME.name(), (info.getServiceProviderName()!=null)?info.getServiceProviderName().toString():"");
                 profileMap.put(ProfileKey.PROVIDER_NAME.name(), (info.getServiceProviderName()!=null)?info.getServiceProviderName().toString():"");
@@ -93,4 +94,14 @@ class ListProfilesWorker {
 
 
         return apduChannel.transmitAPDU(apdu);
         return apduChannel.transmitAPDU(apdu);
     }
     }
+
+    private String iccidBigToLittle(String iccid) {
+        StringBuilder builder = new StringBuilder();
+        for (int i = 0; i < iccid.length() / 2; i++) {
+            builder.append(iccid.charAt(i * 2 + 1));
+            if (iccid.charAt(i * 2) != 'F')
+                builder.append(iccid.charAt(i * 2));
+        }
+        return builder.toString();
+    }
 }
 }

+ 1 - 0
libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/impl/ProfileKey.java

@@ -2,6 +2,7 @@ package com.truphone.lpa.impl;
 
 
 public enum ProfileKey {
 public enum ProfileKey {
     ICCID,
     ICCID,
+    ICCID_LITTLE, // Little Endian
     STATE,
     STATE,
     NAME,
     NAME,
     NICKNAME,
     NICKNAME,