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)