From 0d2fa55f2f88e73018a749a3fe34f33ec365fbbc Mon Sep 17 00:00:00 2001 From: Rashed Abdel-Tawab Date: Thu, 6 Sep 2018 08:48:26 -0700 Subject: [PATCH] lineage: Dynamically add custom APNs For Example new devices need the new Sprint APNs, so add a new board flag for them to set that will make the build system add the new APNs to the APN config XML. If the flag is not set, continue to use the old APNs. To add or replace APNs, the custom_apns.py script has been added. If CUSTOM_APNS_FILE is defined, custom_apns.py is run and generates a new version of apns-conf.xml. Change-Id: I7ff12a4342de2a7663b2b66fd627244214a8dc71 --- config/data_only.mk | 6 +-- config/telephony.mk | 4 +- prebuilt/common/Android.mk | 28 ++++++++++++++ prebuilt/common/etc/apns-conf.xml | 3 -- tools/custom_apns.py | 62 +++++++++++++++++++++++++++++++ 5 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 tools/custom_apns.py diff --git a/config/data_only.mk b/config/data_only.mk index e46b33c3..e45a2d5c 100644 --- a/config/data_only.mk +++ b/config/data_only.mk @@ -1,8 +1,8 @@ # World APN list -PRODUCT_COPY_FILES += \ - vendor/lineage/prebuilt/common/etc/apns-conf.xml:system/etc/apns-conf.xml +PRODUCT_PACKAGES += \ + apns-conf.xml # Telephony packages PRODUCT_PACKAGES += \ Stk \ - CellBroadcastReceiver \ No newline at end of file + CellBroadcastReceiver diff --git a/config/telephony.mk b/config/telephony.mk index 5f23cc48..069e82a1 100644 --- a/config/telephony.mk +++ b/config/telephony.mk @@ -3,8 +3,8 @@ PRODUCT_COPY_FILES += \ vendor/lineage/prebuilt/common/etc/sensitive_pn.xml:system/etc/sensitive_pn.xml # World APN list -PRODUCT_COPY_FILES += \ - vendor/lineage/prebuilt/common/etc/apns-conf.xml:system/etc/apns-conf.xml +PRODUCT_PACKAGES += \ + apns-conf.xml # Telephony packages PRODUCT_PACKAGES += \ diff --git a/prebuilt/common/Android.mk b/prebuilt/common/Android.mk index f15b178c..83eecee9 100644 --- a/prebuilt/common/Android.mk +++ b/prebuilt/common/Android.mk @@ -8,3 +8,31 @@ LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) include $(BUILD_PREBUILT) + +################################ +# Copies the APN list file into system/etc for the product as apns-conf.xml. +# In the case where $(CUSTOM_APNS_FILE) is defined, the content of $(CUSTOM_APNS_FILE) +# is added or replaced to the $(DEFAULT_APNS_FILE). +include $(CLEAR_VARS) + +LOCAL_MODULE := apns-conf.xml +LOCAL_MODULE_CLASS := ETC + +DEFAULT_APNS_FILE := vendor/lineage/prebuilt/common/etc/apns-conf.xml + +ifdef CUSTOM_APNS_FILE +CUSTOM_APNS_SCRIPT := vendor/lineage/tools/custom_apns.py +FINAL_APNS_FILE := $(local-generated-sources-dir)/apns-conf.xml + +$(FINAL_APNS_FILE): PRIVATE_SCRIPT := $(CUSTOM_APNS_SCRIPT) +$(FINAL_APNS_FILE): PRIVATE_CUSTOM_APNS_FILE := $(CUSTOM_APNS_FILE) +$(FINAL_APNS_FILE): $(CUSTOM_APNS_SCRIPT) $(DEFAULT_APNS_FILE) + rm -f $@ + python $(PRIVATE_SCRIPT) $@ $(PRIVATE_CUSTOM_APNS_FILE) +else +FINAL_APNS_FILE := $(DEFAULT_APNS_FILE) +endif + +LOCAL_PREBUILT_MODULE_FILE := $(FINAL_APNS_FILE) + +include $(BUILD_PREBUILT) diff --git a/prebuilt/common/etc/apns-conf.xml b/prebuilt/common/etc/apns-conf.xml index dc07d3f9..bc21f19a 100644 --- a/prebuilt/common/etc/apns-conf.xml +++ b/prebuilt/common/etc/apns-conf.xml @@ -1360,9 +1360,6 @@ - - - diff --git a/tools/custom_apns.py b/tools/custom_apns.py new file mode 100644 index 00000000..b58ece1b --- /dev/null +++ b/tools/custom_apns.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# +# Copyright (C) 2018 The LineageOS 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. +# + +import sys +from xml.dom.minidom import parseString + +def main(argv): + reload(sys) + sys.setdefaultencoding('utf8') + original_file = 'vendor/lineage/prebuilt/common/etc/apns-conf.xml' + + if len(argv) == 3: + output_file_path = argv[1] + custom_override_file = argv[2] + else: + raise ValueError("Wrong number of arguments %s" % len(argv)) + + custom_apn_names = [] + with open(custom_override_file, 'r') as f: + for line in f: + xmltree = parseString(line) + carrier = xmltree.getElementsByTagName('apn')[0].getAttribute('carrier') + custom_apn_names.append(carrier) + + with open(original_file, 'r') as input_file: + with open(output_file_path, 'w') as output_file: + for line in input_file: + writeOriginalLine = True + for apn in custom_apn_names: + if apn in line: + with open(custom_override_file, 'r') as custom_file: + for override_line in custom_file: + if apn in override_line: + output_file.write(override_line) + writeOriginalLine = False + custom_apn_names.remove(apn) + if writeOriginalLine: + if "" in line: + if custom_apn_names: + for apn in custom_apn_names: + with open(custom_override_file, 'r') as custom_file: + for override_line in custom_file: + if apn in override_line: + output_file.write(override_line) + output_file.write(line) + +if __name__ == '__main__': + main(sys.argv)