1 /*
2  * Copyright (C) 2019 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.cdnr;
18 
19 import android.annotation.NonNull;
20 import android.os.PersistableBundle;
21 import android.telephony.CarrierConfigManager;
22 import android.text.TextUtils;
23 
24 import com.android.internal.telephony.uicc.IccRecords;
25 import com.android.internal.telephony.uicc.IccRecords.OperatorPlmnInfo;
26 import com.android.internal.telephony.uicc.IccRecords.PlmnNetworkName;
27 import com.android.telephony.Rlog;
28 
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.List;
32 
33 /** Ef data from carrier config. */
34 public final class CarrierConfigEfData implements EfData {
35     private static final String TAG = "CarrierConfigEfData";
36     private final PersistableBundle mConfig;
37 
CarrierConfigEfData(@onNull PersistableBundle config)38     public CarrierConfigEfData(@NonNull PersistableBundle config) {
39         mConfig = config;
40     }
41 
42     @Override
getServiceProviderName()43     public String getServiceProviderName() {
44         String spn = mConfig.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING);
45         if (TextUtils.isEmpty(spn)) return null;
46         return spn;
47     }
48 
49     @Override
getServiceProviderNameDisplayCondition(boolean isRoaming)50     public int getServiceProviderNameDisplayCondition(boolean isRoaming) {
51         int condition = mConfig.getInt(
52                 CarrierConfigManager.KEY_SPN_DISPLAY_CONDITION_OVERRIDE_INT,
53                 IccRecords.INVALID_CARRIER_NAME_DISPLAY_CONDITION_BITMASK);
54         return condition;
55     }
56 
57     @Override
getServiceProviderDisplayInformation()58     public List<String> getServiceProviderDisplayInformation() {
59         String[] spdi = mConfig.getStringArray(
60                 CarrierConfigManager.KEY_SPDI_OVERRIDE_STRING_ARRAY);
61         return spdi != null ? Arrays.asList(spdi) : null;
62     }
63 
64     @Override
getEhplmnList()65     public List<String> getEhplmnList() {
66         String[] ehplmn = mConfig.getStringArray(
67                 CarrierConfigManager.KEY_EHPLMN_OVERRIDE_STRING_ARRAY);
68         return ehplmn != null ? Arrays.asList(ehplmn) : null;
69     }
70 
71     @Override
getPlmnNetworkNameList()72     public List<PlmnNetworkName> getPlmnNetworkNameList() {
73         String[] pnn = mConfig.getStringArray(
74                 CarrierConfigManager.KEY_PNN_OVERRIDE_STRING_ARRAY);
75         List<PlmnNetworkName> pnnList = null;
76         if (pnn != null) {
77             pnnList = new ArrayList<>(pnn.length);
78             for (String pnnStr : pnn) {
79                 try {
80                     String[] names = pnnStr.split("\\s*,\\s*");
81                     String alphal = names[0];
82                     String alphas = names.length > 1 ? names[1] : "";
83                     pnnList.add(new PlmnNetworkName(alphal, alphas));
84                 } catch (Exception ex) {
85                     Rlog.e(TAG, "CarrierConfig wrong pnn format, pnnStr = " + pnnStr);
86                 }
87             }
88         }
89         return pnnList;
90     }
91 
92     @Override
getOperatorPlmnList()93     public List<OperatorPlmnInfo> getOperatorPlmnList() {
94         // OPL
95         String[] opl = mConfig.getStringArray(
96                 CarrierConfigManager.KEY_OPL_OVERRIDE_STRING_ARRAY);
97         List<OperatorPlmnInfo> oplList = null;
98         if (opl != null) {
99             oplList = new ArrayList<>(opl.length);
100             for (String oplStr : opl) {
101                 try {
102                     String[] info = oplStr.split("\\s*,\\s*");
103                     oplList.add(new OperatorPlmnInfo(
104                             info[0] /* plmn */,
105                             Integer.parseInt(info[1]) /* lactac_start */,
106                             Integer.parseInt(info[2]) /* lactac_end */,
107                             Integer.parseInt(info[3]) /* pnn index */));
108                 } catch (Exception ex) {
109                     Rlog.e(TAG, "CarrierConfig wrong opl format, oplStr = " + oplStr);
110                 }
111             }
112         }
113         return oplList;
114     }
115 }
116