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="gid1" value="bae0000000000000"/>
     47        <carrierTestOverride key="gid2" value="ffffffffffffffff"/>
     48        <carrierTestOverride key="imsi" value="310010123456789"/>
     49        <carrierTestOverride key="spn" value="Verizon"/>
     50        </carrierTestOverrides>
     51      */
     52     static final String DATA_CARRIER_TEST_OVERRIDE_PATH =
     53             "/user_de/0/com.android.phone/files/carrier_test_conf.xml";
     54     static final String CARRIER_TEST_XML_HEADER = "carrierTestOverrides";
     55     static final String CARRIER_TEST_XML_SUBHEADER = "carrierTestOverride";
     56     static final String CARRIER_TEST_XML_ITEM_KEY = "key";
     57     static final String CARRIER_TEST_XML_ITEM_VALUE = "value";
     58     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE = "isInTestMode";
     59     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_GID1 = "gid1";
     60     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_GID2 = "gid2";
     61     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_IMSI = "imsi";
     62     static final String CARRIER_TEST_XML_ITEM_KEY_STRING_SPN = "spn";
     63 
     64     private HashMap<String, String> mCarrierTestParamMap;
     65 
     66     CarrierTestOverride() {
     67         mCarrierTestParamMap = new HashMap<String, String>();
     68         loadCarrierTestOverrides();
     69     }
     70 
     71     boolean isInTestMode() {
     72         return mCarrierTestParamMap.containsKey(CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE)
     73                 && mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE)
     74                 .equals("true");
     75     }
     76 
     77     String getFakeSpn() {
     78         try {
     79             String spn = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_SPN);
     80             Rlog.d(LOG_TAG, "reading spn from CarrierTestConfig file: " + spn);
     81             return spn;
     82         } catch (NullPointerException e) {
     83             Rlog.w(LOG_TAG, "No spn in CarrierTestConfig file ");
     84             return null;
     85         }
     86     }
     87 
     88     String getFakeIMSI() {
     89         try {
     90             String imsi = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_IMSI);
     91             Rlog.d(LOG_TAG, "reading imsi from CarrierTestConfig file: " + imsi);
     92             return imsi;
     93         } catch (NullPointerException e) {
     94             Rlog.w(LOG_TAG, "No imsi in CarrierTestConfig file ");
     95             return null;
     96         }
     97     }
     98 
     99     String getFakeGid1() {
    100         try {
    101             String gid1 = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_GID1);
    102             Rlog.d(LOG_TAG, "reading gid1 from CarrierTestConfig file: " + gid1);
    103             return gid1;
    104         } catch (NullPointerException e) {
    105             Rlog.w(LOG_TAG, "No gid1 in CarrierTestConfig file ");
    106             return null;
    107         }
    108     }
    109 
    110     String getFakeGid2() {
    111         try {
    112             String gid2 = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_GID2);
    113             Rlog.d(LOG_TAG, "reading gid2 from CarrierTestConfig file: " + gid2);
    114             return gid2;
    115         } catch (NullPointerException e) {
    116             Rlog.w(LOG_TAG, "No gid2 in CarrierTestConfig file ");
    117             return null;
    118         }
    119     }
    120 
    121     private void loadCarrierTestOverrides() {
    122 
    123         FileReader carrierTestConfigReader;
    124 
    125         File carrierTestConfigFile = new File(Environment.getDataDirectory(),
    126                 DATA_CARRIER_TEST_OVERRIDE_PATH);
    127 
    128         try {
    129             carrierTestConfigReader = new FileReader(carrierTestConfigFile);
    130             Rlog.d(LOG_TAG, "CarrierTestConfig file Modified Timestamp: "
    131                     + carrierTestConfigFile.lastModified());
    132         } catch (FileNotFoundException e) {
    133             Rlog.w(LOG_TAG, "Can not open " + carrierTestConfigFile.getAbsolutePath());
    134             return;
    135         }
    136 
    137         try {
    138             XmlPullParser parser = Xml.newPullParser();
    139             parser.setInput(carrierTestConfigReader);
    140 
    141             XmlUtils.beginDocument(parser, CARRIER_TEST_XML_HEADER);
    142 
    143             while (true) {
    144                 XmlUtils.nextElement(parser);
    145 
    146                 String name = parser.getName();
    147                 if (!CARRIER_TEST_XML_SUBHEADER.equals(name)) {
    148                     break;
    149                 }
    150 
    151                 String key = parser.getAttributeValue(null, CARRIER_TEST_XML_ITEM_KEY);
    152                 String value = parser.getAttributeValue(null, CARRIER_TEST_XML_ITEM_VALUE);
    153 
    154                 Rlog.d(LOG_TAG,
    155                         "extracting key-values from CarrierTestConfig file: " + key + "|" + value);
    156                 mCarrierTestParamMap.put(key, value);
    157             }
    158             carrierTestConfigReader.close();
    159         } catch (XmlPullParserException e) {
    160             Rlog.w(LOG_TAG, "Exception in carrier_test_conf parser " + e);
    161         } catch (IOException e) {
    162             Rlog.w(LOG_TAG, "Exception in carrier_test_conf parser " + e);
    163         }
    164     }
    165 }
    166