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

这篇具有很好参考价值的文章主要介绍了【开发方案】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

文件:文章来源地址https://www.toymoban.com/news/detail-836212.html

  • 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
    //新建APN
    createApn(serviceId, apnItem) {
      this.fillInputElements(this.inputElements, apnItem.apn);
      return ApnEditorSession(
        { serviceId, mode: 'new' },
        this.inputElements,
        apnItem
      );
    },
    //编辑APN
    editApn(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信息字段的代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java语言创建包含以上数据类型的MySQL表,并提供批量新增数据、批量修改数据、删除数据以及字段的DDL语句的详细代码示例

    以下是使用Java语言创建包含以上数据类型的MySQL表,并提供批量新增数据、批量修改数据、删除数据以及字段的DDL语句的详细代码示例: 请注意,上述代码中的DB_URL、USER和PASS需要根据实际情况进行修改,以连接到正确的MySQL数据库。另外,需要确保已经导入了适当的JDBC驱动

    2024年02月15日
    浏览(75)
  • hive表新增字段,指定新增字段位置,删除字段

    背景:项目中,客户使用hive内表,由于逻辑变更,原hive表结构需要调整,新增字段。 一、新增字段 遇到hive表新增字段,以往建表都是建外表,直接drop后,重新创建。由于这次全部使用内表创建的,所以使用add column功能新增字段。 但是发现,如果已经存在记录的情况下覆

    2024年02月09日
    浏览(47)
  • ES 新增字段和删除字段、修改字段值

    新增字段: 删除字段: 修改es的某个字段值:

    2024年02月05日
    浏览(42)
  • ES 旧表新增字段与删除字段

    注: ES新建库就是所谓的新建索引。一个索引不要采用删除后重建数据迁移的方法,数据量太大,会有服务中断时间。 在我们进行ES索引mapping结果修改后,已有数据是并没有改新增字段的 只有在查询新字段时,系统会根据新字段类型自动返回默认值或者空值

    2024年02月15日
    浏览(38)
  • Oracle数据库在指定字段后新增字段

    记录一下数据库中为表增加字段,且在指定字段后新增; mysql数据库的话比较简单通过一下sql语句即可实现: 而Oracle数据库不支持上述语法,添加字段只能显示到最后一位,所以如果非要添加字段到指定字段后的话可以通过新建数据表并修改表明实现,如下面语句所示:

    2024年02月15日
    浏览(51)
  • es head 新增字段、修改字段、批量修改字段、删除字段、删除数据、批量删除数据

    目录 一、新增字段 二、修改字段值 三、批量修改字段值 ​四、删除字段 五、删除数据/文档 六、批量删除数据/文档 put   http://{ip}:{port}/{index}/_mapping/{type}     其中,index是es索引、type是类型 数据: 例子: 注意:如果报错Types cannot be provided in put mapping requests, unless the in

    2024年02月04日
    浏览(54)
  • ElasticSearch 新增表字段

    1.新增表字段(Elasticsearch中的mapping一旦创建,就不容易再修改。但是添加字段是可以的):: 2.修改表字段的方法 http://www.cnblogs.com/Creator/p/3722408.html 3.ElasticSearch 数据架构的主要概念(与关系数据库Mysql对比) 4.多字段查询:

    2024年02月17日
    浏览(43)
  • ES新增字段后,查询索引中不显示这个字段

    修改ES结构,新增字段 注:为避免修改后该文件结构损坏,修改前先备份 1.复制文档 2.新增字段(text类型) 3.查询字段是否添加成功 诶?!这个时候发现没有添加成功? 然后我通过es的head插件可以看到这个字段 这个时候,我们只需要对字段进行初始化,给一个默认值就解决了

    2024年02月15日
    浏览(47)
  • dedecms新增字段调用实例方法

    大家在织梦使用{dede:channel }标签的时候,难免会遇到因为现在字段不能满足业务需求,需要新增的情况(具体怎么新增字段自行百度)。 但是新增的字段通过DEDE的标签是不能直接使用的,现在博主介绍下怎么添加字段后如何调用: 1、找到 /include/taglib/channel.lib.php 文件; 2、

    2024年02月03日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包