Home | History | Annotate | Download | only in uicc
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.internal.telephony.uicc;
     18 
     19 import android.os.Environment;
     20 import android.telephony.Rlog;
     21 import android.util.Xml;
     22 
     23 import com.android.internal.util.XmlUtils;
     24 
     25 import org.xmlpull.v1.XmlPullParser;
     26 import org.xmlpull.v1.XmlPullParserException;
     27 
     28 import java.io.File;
     29 import java.io.FileNotFoundException;
     30 import java.io.FileReader;
     31 import java.io.IOException;
     32 import java.util.HashMap;
     33 
     34 /**
     35  * Provide a machanism to override MVNO paramteres under CarrierConfig through a config file.
     36  */
     37 public class CarrierTestOverride {
     38     static final String LOG_TAG = "CarrierTestOverride";
     39 
     40     /**
     41      * Config file that can be created and adb-pushed by tester/developer
     42      *
     43      * Sample xml:
     44      * <carrierTestOverrides>
     45        <carrierTestOverride key="isInTestMode" value="true"/>
     46        <carrierTestOverride key="mccmnc" value="310010" />
     47        <carrierTestOverride key="gid1" value="bae0000000000000"/>
     48        <carrierTestOverride key="gid2" value="ffffffffffffffff"/>
     49        <carrierTestOverride key="imsi" value="310010123456789"/>
     50        <carrierTestOverride key="spn" value="Verizon"/>
     51        <carrierTestOverride key="pnn" value="Verizon network"/>
     52        <carrierTestOverride key="iccid" value="123456789012345678901"/>
     53        </carrierTestOverrides>
     54      */
     55     static final String DATA_CARRIER_TEST_OVERRIDE_PATH =
     56             "/user_de/0/com.android.phone/files/carrier_test_conf.xml";
     57     static final String CARRIER_TEST_XML_HEADER = "carrierTestOverrides";
     58     static final String CARRIER_TEST_XML_SUBHEADER = "carrierTestOverride";
     59     static final String CARRIER_TEST_XML_ITEM_KEY = "key";
     60     static final String CARRIER_TEST_XML_ITEM_VALUE = "value";
     61     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE = "isInTestMode";
     62     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_MCCMNC = "mccmnc";
     63     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_GID1 = "gid1";
     64     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_GID2 = "gid2";
     65     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_IMSI = "imsi";
     66     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_SPN = "spn";
     67     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_PNN = "pnn";
     68     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_ICCID = "iccid";
     69 
     70     private HashMap<String, String> mCarrierTestParamMap;
     71 
     72     CarrierTestOverride() {
     73         mCarrierTestParamMap = new HashMap<String, String>();
     74         loadCarrierTestOverrides();
     75     }
     76 
     77     boolean isInTestMode() {
     78         return mCarrierTestParamMap.containsKey(CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE)
     79                 && mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE)
     80                 .equals("true");
     81     }
     82 
     83     String getFakeSpn() {
     84         try {
     85             String spn = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_SPN);
     86             Rlog.d(LOG_TAG, "reading spn from CarrierTestConfig file: " + spn);
     87             return spn;
     88         } catch (NullPointerException e) {
     89             Rlog.w(LOG_TAG, "No spn in CarrierTestConfig file ");
     90             return null;
     91         }
     92     }
     93 
     94     String getFakeIMSI() {
     95         try {
     96             String imsi = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_IMSI);
     97             Rlog.d(LOG_TAG, "reading imsi from CarrierTestConfig file: " + imsi);
     98             return imsi;
     99         } catch (NullPointerException e) {
    100             Rlog.w(LOG_TAG, "No imsi in CarrierTestConfig file ");
    101             return null;
    102         }
    103     }
    104 
    105     String getFakeGid1() {
    106         try {
    107             String gid1 = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_GID1);
    108             Rlog.d(LOG_TAG, "reading gid1 from CarrierTestConfig file: " + gid1);
    109             return gid1;
    110         } catch (NullPointerException e) {
    111             Rlog.w(LOG_TAG, "No gid1 in CarrierTestConfig file ");
    112             return null;
    113         }
    114     }
    115 
    116     String getFakeGid2() {
    117         try {
    118             String gid2 = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_GID2);
    119             Rlog.d(LOG_TAG, "reading gid2 from CarrierTestConfig file: " + gid2);
    120             return gid2;
    121         } catch (NullPointerException e) {
    122             Rlog.w(LOG_TAG, "No gid2 in CarrierTestConfig file ");
    123             return null;
    124         }
    125     }
    126 
    127     String getFakePnnHomeName() {
    128         try {
    129             String pnn = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_PNN);
    130             Rlog.d(LOG_TAG, "reading pnn from CarrierTestConfig file: " + pnn);
    131             return pnn;
    132         } catch (NullPointerException e) {
    133             Rlog.w(LOG_TAG, "No pnn in CarrierTestConfig file ");
    134             return null;
    135         }
    136     }
    137 
    138     String getFakeIccid() {
    139         try {
    140             String iccid = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_ICCID);
    141             Rlog.d(LOG_TAG, "reading iccid from CarrierTestConfig file: " + iccid);
    142             return iccid;
    143         } catch (NullPointerException e) {
    144             Rlog.w(LOG_TAG, "No iccid in CarrierTestConfig file ");
    145             return null;
    146         }
    147     }
    148 
    149     String getFakeMccMnc() {
    150         try {
    151             String mccmnc = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_MCCMNC);
    152             Rlog.d(LOG_TAG, "reading mccmnc from CarrierTestConfig file: " + mccmnc);
    153             return mccmnc;
    154         } catch (NullPointerException e) {
    155             Rlog.w(LOG_TAG, "No mccmnc in CarrierTestConfig file ");
    156             return null;
    157         }
    158     }
    159 
    160     void override(String mccmnc, String imsi, String iccid, String gid1, String gid2, String pnn,
    161             String spn) {
    162         mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE, "true");
    163         mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_MCCMNC, mccmnc);
    164         mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_IMSI, imsi);
    165         mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_ICCID, iccid);
    166         mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_GID1, gid1);
    167         mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_GID2, gid2);
    168         mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_PNN, pnn);
    169         mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_SPN, spn);
    170     }
    171 
    172     private void loadCarrierTestOverrides() {
    173 
    174         FileReader carrierTestConfigReader;
    175 
    176         File carrierTestConfigFile = new File(Environment.getDataDirectory(),
    177                 DATA_CARRIER_TEST_OVERRIDE_PATH);
    178 
    179         try {
    180             carrierTestConfigReader = new FileReader(carrierTestConfigFile);
    181             Rlog.d(LOG_TAG, "CarrierTestConfig file Modified Timestamp: "
    182                     + carrierTestConfigFile.lastModified());
    183         } catch (FileNotFoundException e) {
    184             Rlog.w(LOG_TAG, "Can not open " + carrierTestConfigFile.getAbsolutePath());
    185             return;
    186         }
    187 
    188         try {
    189             XmlPullParser parser = Xml.newPullParser();
    190             parser.setInput(carrierTestConfigReader);
    191 
    192             XmlUtils.beginDocument(parser, CARRIER_TEST_XML_HEADER);
    193 
    194             while (true) {
    195                 XmlUtils.nextElement(parser);
    196 
    197                 String name = parser.getName();
    198                 if (!CARRIER_TEST_XML_SUBHEADER.equals(name)) {
    199                     break;
    200                 }
    201 
    202                 String key = parser.getAttributeValue(null, CARRIER_TEST_XML_ITEM_KEY);
    203                 String value = parser.getAttributeValue(null, CARRIER_TEST_XML_ITEM_VALUE);
    204 
    205                 Rlog.d(LOG_TAG,
    206                         "extracting key-values from CarrierTestConfig file: " + key + "|" + value);
    207                 mCarrierTestParamMap.put(key, value);
    208             }
    209             carrierTestConfigReader.close();
    210         } catch (XmlPullParserException e) {
    211             Rlog.w(LOG_TAG, "Exception in carrier_test_conf parser " + e);
    212         } catch (IOException e) {
    213             Rlog.w(LOG_TAG, "Exception in carrier_test_conf parser " + e);
    214         }
    215     }
    216 }
    217