• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  
CarrierTestOverride()72      CarrierTestOverride() {
73          mCarrierTestParamMap = new HashMap<String, String>();
74          loadCarrierTestOverrides();
75      }
76  
isInTestMode()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  
getFakeSpn()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  
getFakeIMSI()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  
getFakeGid1()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  
getFakeGid2()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  
getFakePnnHomeName()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  
getFakeIccid()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  
getFakeMccMnc()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  
override(String mccmnc, String imsi, String iccid, String gid1, String gid2, String pnn, String spn)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  
loadCarrierTestOverrides()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