参考:KaiOS APN Settings模块代码-CSDN博客
APN 列表页对每一条APN提供编辑、删除等功能 ,对APN整体提供reset重置功能。
当前需要隐藏reset,不允许用户重置APN。
APN列表页在gaia/apps/settings/应用中,在panel.js设置菜单选项,接口registerSoftkey。
- /**
- * The apn list panel
- */
- 'use strict';
- define(function(require) { //eslint-disable-line
- const ListView = require('modules/mvvm/list_view');
- const SettingsPanel = require('modules/settings_panel');
- const ApnSettingsManager = require('modules/apn/apn_settings_manager');
- const ApnTemplateFactory = require('panels/apn_list/apn_template_factory');
- return function createApnSettingsPanel() {
-
- //设置案件
- function registerSoftkey() {
- //1.左边:添加APN
- const softkeyAdd = {
- name: 'Add Apn',
- l10nId: 'add-apn',
- priority: 1,
- method: () => {
- onApnAddAction(serviceIdNum, apnType, rootElement);
- }
- };
- //2.中间:选中APN
- const softkeySelect = {
- name: 'Select',
- l10nId: 'select',
- priority: 2,
- method: () => {
- if (!rootElement.querySelector('.focus label')) {
- return;
- }
- const dataItemId = rootElement.querySelector('.focus label').dataset
- .id;
- const radioElement = rootElement.querySelector('.focus input');
- onApnItemDefaultSet(
- serviceIdNum,
- apnType,
- radioElement,
- itemsOBJ[dataItemId]
- );
- SettingsSoftkey.hide();
- returnTop();
- }
- };
- //3.右边:编辑+删除(+重置)
- const softkeyOption = [
- {
- name: 'Edit',
- l10nId: 'edit',
- priority: 7,
- method: () => {
- focusId = getFocusPos(rootElement);
- const dataItemId = rootElement.querySelector('.focus label').dataset
- .id;
- onApnItemEdit(itemsOBJ[dataItemId]);
- }
- },
- {
- name: 'Delete',
- l10nId: 'delete-apn',
- priority: 8,
- method: () => {
- const dataItemId = rootElement.querySelector('.focus label').dataset
- .id;
- const focusItem = itemsOBJ[dataItemId];
- const dialogConfig = {
- title: { id: 'confirmation', args: {} },
- body: {
- id: 'delete-apn-confirm',
- args: {
- apnName: focusItem.apn.carrier
- }
- },
- cancel: {
- l10nId: 'cancel',
- priority: 1
- },
- confirm: {
- l10nId: 'delete-apn',
- priority: 3,
- callback: () => {
- if (focusItem.apn.deletedCpApn === false) {
- focusItem.apn.deletedCpApn = true;
- ApnSettingsManager.updateApn(
- serviceIdNum,
- focusItem.id,
- focusItem.apn
- )
- .then(() => {
- onApnDelete(rootElement, focusItem.apn.carrier);
- })
- .then(() => {
- updateUI();
- });
- } else {
- ApnSettingsManager.removeApn(serviceIdNum, focusItem.id)
- .then(() => {
- onApnDelete(rootElement, focusItem.apn.carrier);
- })
- .then(() => {
- updateUI();
- });
- }
- }
- }
- };
- DialogHelper.show(dialogConfig);
- }
- }, //如果没有定制开发添加下面reset,可以去掉此逗号
-
- //【开发方案】添加 reset 功能,重置APN
- {
- name: 'Reset to Default',
- l10nId: 'reset-apn',
- priority: 9,
- method() {
- resetApn();
- }
- }
- ]; //softkeyOption
-
- const softkeyParams = {
- header: { l10nId: 'options' },
- items: []
- };
- let focusLabel = rootElement.querySelector('.focus label');
- if (!focusLabel) {
- focusLabel = rootElement.querySelector('li label');
- }
- softkeyParams.items.push(softkeyAdd);
-
- //最终判断菜单用的常量
- if (focusLabel) {
- softkeyParams.items.push(softkeySelect);
- const dataItemId = focusLabel.dataset.id;
- const focusItem = itemsOBJ[dataItemId];
- if (
- focusItem.itemCategory !== 'preset' ||
- focusItem.itemApn.carrier !== 'Jio 4G'
- ) {
- // eslint-disable-next-line
- softkeyParams.items.push.apply(softkeyParams.items, softkeyOption);
- }
- }
- SettingsSoftkey.init(softkeyParams);
-
- } //菜单功能函数接口 registerSoftkey
-
- //更新菜单配置
- function updateSoftkey() {
- registerSoftkey();
- SettingsSoftkey.show();
- }
-
-
- return SettingsPanel({
- }); //SettingsPanel
-
- }; //createApnSettingsPanel.
- });
在功能函数 registerSoftkey 中自定义菜单选项常量 softkeyOption_custom,然后最后通过判断你选择不同的菜单内容项。
- const softkeyOption_custom = [
- {
- name: 'More Info',
- l10nId: 'more-info',
- priority: 7,
- method: function() {
- focusId = getFocusPos(rootElement);
- const dataItemId=rootElement.querySelector('.focus label').dataset.id;
- onApnItemMoreInfo(itemsOBJ[dataItemId]);
- }
- }
- ];
-
- if (focusLabel) {
- softkeyParams.items.push(softkeySelect);
- const dataItemId = focusLabel.dataset.id;
- const focusItem = itemsOBJ[dataItemId];
- if(ApnUtils.isOpSim()) { //自定义接口判断 , ApnUtils工具类自定义在js/module中
- softkeyParams.items.push.apply(softkeyParams.items, softkeyOption_custom );
- dump('apn_list/panel, OP require to remove Reset menu.');
- } else {
- softkeyParams.items.push.apply(softkeyParams.items, softkeyOption);
- }
- }
apn_list/panel.js 导入个工具类可用如下方式:
const ApnUtils = require('modules/apn/apn_utils');
Note:新增接口的时候一定要同步加到return中,否则报错找不到函数:
04-05 16:50:43.277 2048 2048 E Web Content: [JavaScript Error: "TypeError: ApnUtils.isOpSim is not a function" {file: "http://settings.localhost/js/panels/apn_list/panel.js" line: 291}]
- /* global ApnHelper, SimCardHelper */
- /**
- * The apn utilities
- */
- 'use strict';
- define(function(require) { //eslint-disable-line
- const ApnConst = require('modules/apn/apn_const');
- const ApnItem = require('modules/apn/apn_item');
-
-
-
- //新增函数判断运营商
- function isOpSim() {
- let connection = navigator.b2g.mobileConnections;
- if (connection[0]) {
- let iccId = connection[0].iccId;
- if (iccId) {
- let iccInfo = navigator.b2g.iccManager.getIccById(iccId).iccInfo;
- if (iccInfo) {
- let mcc = iccInfo.mcc;
- let mnc = iccInfo.mnc;
- let gid1 = iccInfo.gid1 + '';
- let gid1Upper = gid1.toUpperCase() + '';
- let mccmnc = mcc.concat(mnc);
- dump('apn_utils: check isOpSim, mccmnc = ' + mccmnc + ', gid1 = ' + gid1);
- if (gid1Upper.indexOf('BA01490000000000') == 0 && mccmnc === '311480') {
- return true;
- } else if (mccmnc === '31420') {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- return {
- getOperatorCode,
- apnTypeFilter,
- getDefaultApns,
- getCpApns,
- getEuApns,
- generateId,
- separateApnsByType,
- isMatchedApn,
- sortByCategory,
- clone,
- isOpSim
- };
- });
push替换settings应用文件application.zip到设备快速调试。
如果是kaios全编项目,则settings产物在 gaia/profile/webapps 目录下。