get group identifier level1 (Gid1)
Hyejin Kim [Wed, 6 Feb 2013 23:28:54 +0000 (08:28 +0900)]
To recognize MVNO(Mobile Virtual Network Operator), need some filters,
Service Provider Name(SPN), International Mobile Subscriber ID(IMSI),
and Group Identifier Level1(Gid1).
The GID1 elementary files on the SIM are specified in GSM 11.11 (ETS 300 977)

To get Gid1, implement it.

Bug: 8143480
Change-Id: I44f9d622240a73c42ea6418d2d55e1dae23f3b81

src/java/com/android/internal/telephony/uicc/IccConstants.java
src/java/com/android/internal/telephony/uicc/IccRecords.java
src/java/com/android/internal/telephony/uicc/SIMFileHandler.java
src/java/com/android/internal/telephony/uicc/SIMRecords.java [changed mode: 0755->0644]
src/java/com/android/internal/telephony/uicc/UsimFileHandler.java

index c689539..26ae602 100644 (file)
@@ -23,6 +23,7 @@ public interface IccConstants {
     // GSM SIM file ids from TS 51.011
     static final int EF_ADN = 0x6F3A;
     static final int EF_FDN = 0x6F3B;
+    static final int EF_GID1 = 0x6F3E;
     static final int EF_SDN = 0x6F49;
     static final int EF_EXT1 = 0x6F4A;
     static final int EF_EXT2 = 0x6F4B;
index 38da633..23f04b4 100644 (file)
@@ -72,6 +72,8 @@ public abstract class IccRecords extends Handler implements IccConstants {
 
     protected String spn;
 
+    protected String gid1;
+
     // ***** Constants
 
     // Markers for mncLength
@@ -214,6 +216,14 @@ public abstract class IccRecords extends Handler implements IccConstants {
     }
 
     /**
+     * Get the Group Identifier Level 1 (GID1) on a SIM for GSM.
+     * @return null if SIM is not yet ready
+     */
+    public String getGid1() {
+        return null;
+    }
+
+    /**
      * Set subscriber number to SIM record
      *
      * The subscriber number is stored in EF_MSISDN (TS 51.011)
index 797a085..ed899ea 100644 (file)
@@ -55,6 +55,7 @@ public final class SIMFileHandler extends IccFileHandler implements IccConstants
         case EF_SPDI:
         case EF_SST:
         case EF_CFIS:
+        case EF_GID1:
             return MF_SIM + DF_GSM;
 
         case EF_MAILBOX_CPHS:
old mode 100755 (executable)
new mode 100644 (file)
index 66eaf6a..0854512
@@ -147,6 +147,7 @@ public class SIMRecords extends IccRecords {
     private static final int EVENT_SIM_REFRESH = 31;
     private static final int EVENT_GET_CFIS_DONE = 32;
     private static final int EVENT_GET_CSP_CPHS_DONE = 33;
+    private static final int EVENT_GET_GID1_DONE = 34;
 
     // Lookup table for carriers known to produce SIMs which incorrectly indicate MNC length.
 
@@ -220,6 +221,7 @@ public class SIMRecords extends IccRecords {
         efCPHS_MWI = null;
         spdiNetworks = null;
         pnnHomeName = null;
+        gid1 = null;
 
         adnCache.reset();
 
@@ -250,6 +252,11 @@ public class SIMRecords extends IccRecords {
     }
 
     @Override
+    public String getGid1() {
+        return gid1;
+    }
+
+    @Override
     public UsimServiceTable getUsimServiceTable() {
         return mUsimServiceTable;
     }
@@ -1105,6 +1112,22 @@ public class SIMRecords extends IccRecords {
                 handleEfCspData(data);
                 break;
 
+            case EVENT_GET_GID1_DONE:
+                isRecordLoadResponse = true;
+
+                ar = (AsyncResult)msg.obj;
+                data =(byte[])ar.result;
+
+                if (ar.exception != null) {
+                    loge("Exception in get GID1 " + ar.exception);
+                    gid1 = null;
+                    break;
+                }
+                gid1 = IccUtils.bytesToHexString(data);
+                log("GID1: " + gid1);
+
+                break;
+
             default:
                 super.handleMessage(msg);   // IccRecords handles generic record load responses
 
@@ -1374,7 +1397,10 @@ public class SIMRecords extends IccRecords {
         mFh.loadEFTransparent(EF_INFO_CPHS, obtainMessage(EVENT_GET_INFO_CPHS_DONE));
         recordsToLoad++;
 
-        mFh.loadEFTransparent(EF_CSP_CPHS,obtainMessage(EVENT_GET_CSP_CPHS_DONE));
+        mFh.loadEFTransparent(EF_CSP_CPHS, obtainMessage(EVENT_GET_CSP_CPHS_DONE));
+        recordsToLoad++;
+
+        mFh.loadEFTransparent(EF_GID1, obtainMessage(EVENT_GET_GID1_DONE));
         recordsToLoad++;
 
         // XXX should seek instead of examining them all
@@ -1696,6 +1722,7 @@ public class SIMRecords extends IccRecords {
         pw.println(" spdiNetworks[]=" + spdiNetworks);
         pw.println(" pnnHomeName=" + pnnHomeName);
         pw.println(" mUsimServiceTable=" + mUsimServiceTable);
+        pw.println(" gid1=" + gid1);
         pw.flush();
     }
-}
\ No newline at end of file
+}
index f219153..4e7369d 100644 (file)
@@ -57,6 +57,7 @@ public final class UsimFileHandler extends IccFileHandler implements IccConstant
         case EF_EXT2:
         case EF_INFO_CPHS:
         case EF_CSP_CPHS:
+        case EF_GID1:
             return MF_SIM + DF_ADF;
 
         case EF_PBR: