增加National data roaming 菜单定制

AT&T 等运营商需求:
增加 National data roaming /All network roaming 漫游开关选项
National data roaming :sim卡与注册网络:mcc相同,mnc不同
All network roaming :sim卡与注册网络:mcc不同
 
目前MTK平台行为: 漫游开关只有enable 和disable 选项, 不区分National data roaming /All network roaming
 
 
 
方案: 在mobile network settings中新增 National data roaming /All network roaming 菜单,用feature控制是显示平台原始的漫游开关,还是新的漫游开关
具体实现分为两部分:1. 界面部分实现  2. data framework部分实现
 
一 : 界面部分实现
//添加具有national data roaming和all network roaming和disable选项的漫游开关菜单
 
1.增加布局文件
   在 /packages/services/Telephonyres/xml/network_setting.xml增加新菜单的布局
   如旧的roaming布局是button_roaming_key, 可以新增布局文件是button_roamingforxx_key
   旧的只有enable和disable两项,使用switch, 新的是national data roaming和all network roaming和disable, 使用ListPreference
   注意: 是新增布局,不是删除旧的
 
2. 在代码中添加布局:
    /packages/services/Telephony/src/com/android/phone/MobileNetworkSettings.java
     a.新增控件
     旧的:private static final String BUTTON_ROAMING_KEY = "button_roaming_key";
     新增:private static final String BUTTON_ROAMING_KEY = "button_roamingforxx_key";
     旧的控件:private SwitchPreference mButtonDataRoam;
     新的控件:private ListPreference mButtonDataRoamForXX;  //因为有三项,所以使用 ListPreference
       
     b.在onCreat里加载布局到控件里:
     旧的 mButtonDataRoam = (SwitchPreference) prefSet.findPreference(BUTTON_ROAMING_KEY);
     新的:mButtonDataRoamForXX =...
     c. 在  updateBody()中使用feature来控制mobile network settings界面是显示默认的漫游开关,还是显示新的AT&T的漫游开关菜单
         if (prefSet != null) {
652       prefSet.removeAll();
653       prefSet.addPreference(mButtonDataRoam);  //默认是显示的data roaming开关,可以在这里定制显示为AT&T的漫游菜单
654       prefSet.addPreference(mButtonPreferredNetworkMode);
             ...
657        }
         
         
3. 设置初始默认值 (例如初始值是设置为national data roaming打开,还是all network roaming打开,还是disable)
   可以在updateBody中设置菜单的选项,具体怎么设置可以参考mButtonPreferredNetworkMode的实现,mButtonPreferredNetworkMode也是ListPreferencem 
        
4. 增加点击national data roaming和all network roaming 菜单的逻辑
    在onPreferenceChange增加点击ButtonDataRoamForXX的逻辑(具体可以参考mButtonDataRoam是怎么做的)
-----------------------------------------------------------
二:data framework 部分
//怎么去判断当前网络是否处在national data roaming状态的?    
//以及默认为national data roaming时, data方面的控制逻辑修改。
 

a.目前判断漫游状态的接口是:
/frameworks/base/telephony/java/android/telephony/ServiceState.java
getDataRoaming()

上面这个接口状态可以认为是全网漫游:all network raoming的接口(sim卡的mcc != 注册网络的mcc)

可以在同样的地方定制一个national data roaming状态的接口:getNationalDataRoaming() 
判断是否是national roaming的方法是:  (sim卡的mcc == 注册网络的mcc)  &&(sim卡的mnc != 注册网络的mnc)

----------------------------------
b.判断漫游开关状态的接口是:
/frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
getDataOnRoamingEnabled()

//假设项目是双卡,会走如下逻辑读取漫游开关数据库
 isDataRoamingEnabled = TelephonyManager.getIntWithSubId(mResolver,
                        Settings.Global.DATA_ROAMING, phoneSubId) != 0; 

这里假设对漫游数据库的设计是:0代表disable , 1代表national roaming , 2 代表 all network roaming
上面这一段可以修改为:
 isDataRoamingEnabled =TelephonyManager.getIntWithSubId(mResolver,
                        Settings.Global.DATA_ROAMING, phoneSubId) ==2 ;  //定制是否是全网漫游模式,AT&T的漫游菜单,才这样判断,否则保持默认

同时在增加national roaming的开关状态接口getNationalDataOnRoamingEnabled()  --> 参考getDataOnRoamingEnabled()的设计

c.最后一步,在代码中有判断漫游状态及开关的状态处增加national roaming的判断,以界面打开数据开关走到onSetUserDataEnabled里判断漫游开关举例:
原始的:
  if (getDataOnRoamingEnabled() == false &&
        mPhone.getServiceState().getDataRoaming() == true) {

新的:
  if (getDataOnRoamingEnabled() == false &&
        mPhone.getServiceState().getDataRoaming() == true ||  (getNationalDataRoaming() && getNationalDataOnRoamingEnabled()) ) {

note : 上面的方案针对N和M,不是最简洁的,可以作为参考。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值