blob: da51848dabef7eac9060ba1d823388771126ff79 [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.internal.telephony.uicc;
import android.os.Environment;
import android.util.Xml;
import com.android.internal.telephony.util.XmlUtils;
import com.android.telephony.Rlog;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
/**
* Provide a machanism to override MVNO paramteres under CarrierConfig through a config file.
*/
public class CarrierTestOverride {
static final String LOG_TAG = "CarrierTestOverride";
/**
* Config file that can be created and adb-pushed by tester/developer
*
* Sample xml:
* <carrierTestOverrides>
<carrierTestOverride key="isInTestMode" value="true"/>
<carrierTestOverride key="mccmnc" value="310010" />
<carrierTestOverride key="gid1" value="bae0000000000000"/>
<carrierTestOverride key="gid2" value="ffffffffffffffff"/>
<carrierTestOverride key="imsi" value="310010123456789"/>
<carrierTestOverride key="spn" value="Verizon"/>
<carrierTestOverride key="pnn" value="Verizon network"/>
<carrierTestOverride key="iccid" value="123456789012345678901"/>
</carrierTestOverrides>
*/
static final String DATA_CARRIER_TEST_OVERRIDE_PATH =
"/user_de/0/com.android.phone/files/carrier_test_conf.xml";
static final String CARRIER_TEST_XML_HEADER = "carrierTestOverrides";
static final String CARRIER_TEST_XML_SUBHEADER = "carrierTestOverride";
static final String CARRIER_TEST_XML_ITEM_KEY = "key";
static final String CARRIER_TEST_XML_ITEM_VALUE = "value";
static final String CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE = "isInTestMode";
static final String CARRIER_TEST_XML_ITEM_KEY_STRING_MCCMNC = "mccmnc";
static final String CARRIER_TEST_XML_ITEM_KEY_STRING_GID1 = "gid1";
static final String CARRIER_TEST_XML_ITEM_KEY_STRING_GID2 = "gid2";
static final String CARRIER_TEST_XML_ITEM_KEY_STRING_IMSI = "imsi";
static final String CARRIER_TEST_XML_ITEM_KEY_STRING_SPN = "spn";
static final String CARRIER_TEST_XML_ITEM_KEY_STRING_PNN = "pnn";
static final String CARRIER_TEST_XML_ITEM_KEY_STRING_ICCID = "iccid";
private HashMap<String, String> mCarrierTestParamMap;
CarrierTestOverride() {
mCarrierTestParamMap = new HashMap<String, String>();
loadCarrierTestOverrides();
}
boolean isInTestMode() {
return mCarrierTestParamMap.containsKey(CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE)
&& mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE)
.equals("true");
}
String getFakeSpn() {
try {
String spn = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_SPN);
Rlog.d(LOG_TAG, "reading spn from CarrierTestConfig file: " + spn);
return spn;
} catch (NullPointerException e) {
Rlog.w(LOG_TAG, "No spn in CarrierTestConfig file ");
return null;
}
}
String getFakeIMSI() {
try {
String imsi = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_IMSI);
Rlog.d(LOG_TAG, "reading imsi from CarrierTestConfig file: " + imsi);
return imsi;
} catch (NullPointerException e) {
Rlog.w(LOG_TAG, "No imsi in CarrierTestConfig file ");
return null;
}
}
String getFakeGid1() {
try {
String gid1 = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_GID1);
Rlog.d(LOG_TAG, "reading gid1 from CarrierTestConfig file: " + gid1);
return gid1;
} catch (NullPointerException e) {
Rlog.w(LOG_TAG, "No gid1 in CarrierTestConfig file ");
return null;
}
}
String getFakeGid2() {
try {
String gid2 = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_GID2);
Rlog.d(LOG_TAG, "reading gid2 from CarrierTestConfig file: " + gid2);
return gid2;
} catch (NullPointerException e) {
Rlog.w(LOG_TAG, "No gid2 in CarrierTestConfig file ");
return null;
}
}
String getFakePnnHomeName() {
try {
String pnn = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_PNN);
Rlog.d(LOG_TAG, "reading pnn from CarrierTestConfig file: " + pnn);
return pnn;
} catch (NullPointerException e) {
Rlog.w(LOG_TAG, "No pnn in CarrierTestConfig file ");
return null;
}
}
String getFakeIccid() {
try {
String iccid = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_ICCID);
Rlog.d(LOG_TAG, "reading iccid from CarrierTestConfig file: " + iccid);
return iccid;
} catch (NullPointerException e) {
Rlog.w(LOG_TAG, "No iccid in CarrierTestConfig file ");
return null;
}
}
String getFakeMccMnc() {
try {
String mccmnc = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_MCCMNC);
Rlog.d(LOG_TAG, "reading mccmnc from CarrierTestConfig file: " + mccmnc);
return mccmnc;
} catch (NullPointerException e) {
Rlog.w(LOG_TAG, "No mccmnc in CarrierTestConfig file ");
return null;
}
}
void override(String mccmnc, String imsi, String iccid, String gid1, String gid2, String pnn,
String spn) {
mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE, "true");
mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_MCCMNC, mccmnc);
mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_IMSI, imsi);
mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_ICCID, iccid);
mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_GID1, gid1);
mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_GID2, gid2);
mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_PNN, pnn);
mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_SPN, spn);
}
private void loadCarrierTestOverrides() {
FileReader carrierTestConfigReader;
File carrierTestConfigFile = new File(Environment.getDataDirectory(),
DATA_CARRIER_TEST_OVERRIDE_PATH);
try {
carrierTestConfigReader = new FileReader(carrierTestConfigFile);
Rlog.d(LOG_TAG, "CarrierTestConfig file Modified Timestamp: "
+ carrierTestConfigFile.lastModified());
} catch (FileNotFoundException e) {
Rlog.w(LOG_TAG, "Can not open " + carrierTestConfigFile.getAbsolutePath());
return;
}
try {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(carrierTestConfigReader);
XmlUtils.beginDocument(parser, CARRIER_TEST_XML_HEADER);
while (true) {
XmlUtils.nextElement(parser);
String name = parser.getName();
if (!CARRIER_TEST_XML_SUBHEADER.equals(name)) {
break;
}
String key = parser.getAttributeValue(null, CARRIER_TEST_XML_ITEM_KEY);
String value = parser.getAttributeValue(null, CARRIER_TEST_XML_ITEM_VALUE);
Rlog.d(LOG_TAG,
"extracting key-values from CarrierTestConfig file: " + key + "|" + value);
mCarrierTestParamMap.put(key, value);
}
carrierTestConfigReader.close();
} catch (XmlPullParserException e) {
Rlog.w(LOG_TAG, "Exception in carrier_test_conf parser " + e);
} catch (IOException e) {
Rlog.w(LOG_TAG, "Exception in carrier_test_conf parser " + e);
}
}
}