【开发方案】KaiOS 新增APN信息字段的代码实现

2024-02-22 13:12

本文主要是介绍【开发方案】KaiOS 新增APN信息字段的代码实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

KaiOS 基线不提供MCC、MNC、MVNO和bearer等信息的显示,因此在APN详情页无法查看单条APN的这些信息,跟Android 原生逻辑存在差异,需要自行实现。

相关知识和编译调试方法

KaiOS APN Settings模块代码-CSDN博客

KaiOS 运营商相关文件operator_variant_manager.js代码功能和调试-CSDN博客

KaiOS Data业务代码调试验证方法(无需项目全编)-CSDN博客

KaiOS APN配置文件apn.json调试验证方法(无需项目全编)-CSDN博客

KaiOS APN 编辑页代码逻辑-CSDN博客

KaiOS 系统全编和模块单编-CSDN博客

代码

模块:gaia/apps/settings

文件:

  • js/panels/apn_editor/apn_editor_const.js 添加界面字段常量
  • elements/apn_editor.html 添加UI显示字段
  • js/panels/apn_editor_tct/apn_editor.js 填充数据

apn_editor_const.js 数据字段定义

//js/panels/apn_editor/apn_editor_const.js /*** The apn editor const*/
define(() => {const APN_PROPERTY_DEFAULTS = {//kaios默认支持carrier: '',apn: '',user: '',password: '',proxy: '',port: '',mmsc: '',mmsproxy: '',mmsport: '',authtype: 'notDefined',types: ['default'],protocol: 'notDefined',roaming_protocol: 'notDefined', //eslint-disable-line//客制化新增字段 mcc: '',mnc: '',mvno_type: 'notDefined',mvno_match_data: ''bearer:''};const APN_PROPERTIES = Object.keys(APN_PROPERTY_DEFAULTS);});

 apn_editor.html 布局

<element name="apn_editor" extends="section"><template><gaia-header data-href="#apn_list"><h1 slot="text" data-l10n-id="apn-editor-header"></h1></gaia-header><div class="panel"><ul role="menu" class="apnSettings-advanced"><!--Kaios原生字段-->  <li role="menuitem"><p data-l10n-id="apn-name" class="input-description"></p><input type="text" x-inputmode="verbatim" class="carrier" dir="auto" maxlength="100" /></li><li role="menuitem"><p data-l10n-id="apn" class="input-description"></p><input type="text" x-inputmode="verbatim" class="apn" dir="auto" maxlength="100" /></li><!--新增自定义字段,根据模板新增li列表--><li role="menuitem"><p class="input-description">MCC</p><input type="text" x-inputmode="verbatim" class="mcc" dir="auto" maxlength="100" /></li><li role="menuitem"><p class="input-description">MNC</p><input type="text" x-inputmode="verbatim" class="mnc" dir="auto" maxlength="100" /></li><li role="menuitem"><p class="apn-mvno-type">Mvno Type</p><span class="button icon icon-dialog"><select class="mvno_type" data-track-class="apn-mvno-type"><option value="notDefined" data-l10n-id="apn-protocol-notDefined"></option><option value="gid">GID</option><option value="spn">SPN</option><option value="pnn">PNN</option><option value="iccid">ICCID</option><option value="ecid">ECID</option></select></span></li><li role="menuitem"><p class="input-description">Mvno Match Data</p><input type="text" x-inputmode="verbatim" class="mvno_match_data" dir="auto" maxlength="100" /></li></ul></div><panel data-path="panels/apn_editor_tct/panel"></panel></template>
</element>

apn_editor.js 数据加载

//apn_editor.js/*** The apn editor module*/
'use strict';
define(function(require) { //eslint-disable-line//ApnEditor对象function ApnEditor(rootElement) {this.inputElements = {};APN_PROPERTIES.forEach(function input(name) {this.inputElements[name] = rootElement.querySelector(`.${name}`);}, this);}//原型的构造方法和内部接口ApnEditor.prototype = {convertValue(value, converter) {if (converter) {return converter(value);}return value;},//客制化方法填充界面详情fillInputElementsNoneEditable: function ae_fillInputElementsNoneEditable(inputElements, apnItem, editable) {let iccInfo = getIccInfo(0);let mcc = iccInfo && iccInfo.mcc;let mnc = iccInfo && iccInfo.mnc;let gid1 = iccInfo && iccInfo.gid1;mcc = mcc || '000';mnc = mnc || '00';gid1 = (gid1 === undefined || gid1 == null || gid1 == '') ? '' : gid1;gid1 = gid1.toLowerCase();log('fillInputElementsNoneEditable: mccmnc=' + mcc + mnc + ' gid1=' + gid1+ ' iccInfo=' + iccInfo);let bearer = '1|2|3|4';bearer = apnItem.bearer;  //默认拿到的bearer是十进制的,需要转换APN_PROPERTIES.forEach(function input(name) {const inputElement = inputElements[name];if (inputElement) {let value = (apnItem.apn && apnItem.apn[name.toLowerCase()]) || APN_PROPERTY_DEFAULTS[name];//填充数据if (name == 'mcc') {value = value || mcc;} else if (name == 'bearer') { value = value || bearer;}inputElement.value = this.convertValue(value,VALUE_CONVERTERS.TO_STRING[name]);}}, this); //APN_PROPERTIESAPN_PROPERTIES},//新增APN时填充默认数据fillInputElements(inputElements, apn) {let iccInfo = getIccInfo(0);let mcc = iccInfo && iccInfo.mcc;let iccInfo = getIccInfo(0);let mcc = iccInfo && iccInfo.mcc;mcc = mcc || '000';//定制默认值let bearer = '1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20';APN_PROPERTIES.forEach(function input(name) {const inputElement = inputElements[name];if (inputElement) {inputElement.removeAttribute('disabled');let value =(apn && apn[name.toLowerCase()]) || APN_PROPERTY_DEFAULTS[name];if (name == 'mcc') {value = mcc;} else if (name == 'bearer') {if (bearer != '') {value = bearer; //定制默认值}}}}inputElement.value = this.convertValue(value,VALUE_CONVERTERS.TO_STRING[name]);}}, this);},//新建和查看 APN是不同的APNEditor内容。新增时需要填充默认数据,用fillInputElements//新建APNcreateApn(serviceId, apnItem) {this.fillInputElements(this.inputElements, apnItem.apn);return ApnEditorSession({ serviceId, mode: 'new' },this.inputElements,apnItem);},//编辑APNeditApn(serviceId, apnItem, editable) {this.fillInputElementsNoneEditable(this.inputElements, apnItem, editable); //客制化可编辑性return ApnEditorSession({ serviceId, mode: 'edit' },this.inputElements,apnItem);}};//最后返回对象return function apnEditor(rootElement) {return new ApnEditor(rootElement);};)};

这篇关于【开发方案】KaiOS 新增APN信息字段的代码实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/735357

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来