设置里网络和互联网—> 移动网络,标题和底部卡选项的标题在切换语言时出问题。

vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/network/telephony/MobileNetworkActivity.java

分析原因是里面的

subInfo.getDisplayName()这个方法返回的不知为何不受系统语言切换而更新,就一直停留在英文

解决方法:(不是本质的)

由于外面的小标题summary是正常的,用到的是mTelephonyManager.getNetworkOperatorName(),

所以,

定义全局变量:

private TelephonyManager mTelephonyManager;

1,在void updateSubscriptions(BundlesavedInstanceState) {方法最后

加入

mTelephonyManager = TelephonyManager.from(this).createForSubscriptionId(getSubscriptionId());
       setTitle(mTelephonyManager.getNetworkOperatorName());

这个方法是onCreate的最后执行的,所以每次点开就会执行

2,在void updateBottomNavigationView() {方法中

源码

if (CollectionUtils.size(mSubscriptionInfos)<= 1) {
           navigation.setVisibility(View.GONE);
       } else {
           final Menu menu = navigation.getMenu();
           menu.clear();
           for (int i = 0, size = mSubscriptionInfos.size(); i < size; i++) {
                final SubscriptionInfosubscriptionInfo = mSubscriptionInfos.get(i);

一张卡的时候是没有底部选项的,

加入定义变量:

mTelephonyManager =TelephonyManager.from(this).createForSubscriptionId(subscriptionInfo.getSubscriptionId());

menu.add(0,subscriptionInfo.getSubscriptionId(), i,

之后替换掉参数

subscriptionInfo.getDisplayName())

换成

mTelephonyManager.getNetworkOperatorName())

这个方法也是一开始就会更新到,然后最后会执行监听更换底部fragment的事件

3,void switchFragment(Fragment fragment, intsubscriptionId, boolean forceUpdate) {

最后在更新title的时候

for (SubscriptionInfo subInfo :mSubscriptionInfos) {
                MenuItem item = null;
                if (menu != null) {
                    item =menu.findItem(subInfo.getSubscriptionId());
                }
 
                if (subInfo.getSubscriptionId()== mCurSubscriptionId) {
                    /*/tyd.yantao 20230104 fixtitle unchange while multiple sim in change sim fragment
                   setTitle(subInfo.getDisplayName());
                    //*/
                    mTelephonyManager =TelephonyManager.from(this).createForSubscriptionId(subInfo.getSubscriptionId());
                   setTitle(mTelephonyManager.getNetworkOperatorName());
                    //*/

这个方法是保证每次切换的时候顶部标题会变成对应的该有的标题

4,

最后在privatevoid handleSubscriptionChange(List<SubscriptionInfo> subList) {

if (simNum == 1) {
           subInfo = mSubscriptionInfos.get(0);
           /*/tyd.yantao 20230104 fix title unchange while click to switch Romaing
           setTitle(subInfo.getDisplayName());
           //*/
           return;
       }

一张卡的时候不需要这个settitle了,因为第一步已经执行过了

然后下面多卡的判断下

for (int i = 0; i < simNum; i++) {
           subInfo = mSubscriptionInfos.get(i);

类似第三步。加入

mTelephonyManager = TelephonyManager.from(this).createForSubscriptionId(subInfo.getSubscriptionId());

然后把底下的

setTitle(subInfo.getDisplayName());和item.setTitle(subInfo.getDisplayName());

换成

setTitle(mTelephonyManager.getNetworkOperatorName());和item.setTitle(mTelephonyManager.getNetworkOperatorName());

这个方法是为了保证点击漫游开关状态后标题会不正常!!!!,不点击不会触发

猜你喜欢

转载自blog.csdn.net/youthking1314/article/details/128913646
今日推荐