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());
这个方法是为了保证点击漫游开关状态后标题会不正常!!!!,不点击不会触发