当前位置: 首页 > news >正文

Android U Settings 应用中 APN 菜单实现的代码逻辑

功能简介

MobileNetwork移动网络设置页面下有【接入点设置】(APN)。

问题:为什么Controller初始化找不到pref,然后报错。

Note:什么时候切换成Controller的呢?在Android T&U 上还没有更新成kt实现 ,但是已经有Controller的方案。

流程逻辑

1、界面“telephony_apn_key” 绑定 “ApnPreferenceController”

        <com.android.settingslib.RestrictedPreferenceandroid:key="telephony_apn_key"android:persistent="false"android:title="@string/mobile_network_apn_title"settings:allowDividerAbove="true"settings:keywords="@string/keywords_access_point_names"settings:controller="com.android.settings.network.telephony.ApnPreferenceController"/>

2、加载UI时,“MobileNetworkSettings” -- onAttach --  use(Controller).init(subId)

  use(ApnPreferenceController.class).init(mSubId);

就是此处异常,无法创建ApnPreferenceController对象实例。

Note:use是什么逻辑?

关于界面刷新

MobileNetworkSettings类控制着移动网络设置的各个菜单显示逻辑,

onAvailableSubInfoChanged -- MobileNetworkRepository的回调

onSubscriptionDetailChanged -- 更新标题并刷新控件

redrawPreferenceControllers -- 开线程,在主线程更新UI,由父类实现

通过 ThreadUtils.postOnMainThread() 保证在主线程刷新界面,redrawPreferenceControllers 重新绘制/更新屏幕上的菜单控件。

ThreadUtils.postOnMainThread(() -> {renameTitle.accept(getActivity());redrawPreferenceControllers();
});

代码详情

业务代码

 mobile_network_settings 布局

packages/apps/Settings/res/xml/mobile_network_settings.xml

定义移动网络界面的菜单控件,以供MobileNetwork渲染使用。

<PreferenceScreenxmlns:android="http://schemas.android.com/apk/res/android"xmlns:settings="http://schemas.android.com/apk/res-auto"android:key="mobile_network_pref_screen"><PreferenceCategoryandroid:key="enabled_state_container"android:title="@string/summary_placeholder"settings:controller="com.android.settings.network.telephony.DisabledSubscriptionController"android:layout="@layout/preference_category_no_label"><!--We want separate APN setting from reset of settings because we want user to change it with caution--><com.android.settingslib.RestrictedPreferenceandroid:key="telephony_apn_key"android:persistent="false"android:title="@string/mobile_network_apn_title"settings:allowDividerAbove="true"settings:keywords="@string/keywords_access_point_names"settings:controller="com.android.settings.network.telephony.ApnPreferenceController"/></PreferenceCategory></PreferenceScreen>

MobileNetworkSettings 界面加载

packages/apps/Settings/src/com/android/settings/network/telephony/MobileNetworkSettings.java

加载界面菜单控件,并响应多种信息回调更新界面,如注册状态变化时,显示或隐藏某些功能菜单。

@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class MobileNetworkSettings extends AbstractMobileNetworkSettings implementsMobileNetworkRepository.MobileNetworkCallback {private static final String LOG_TAG = "NetworkSettings";//界面创建时候初始化各菜单的控制器@Overridepublic void onAttach(Context context) {super.onAttach(context);use(ApnPreferenceControll
http://www.lryc.cn/news/384955.html

相关文章:

  • java时间处理工具类
  • Android高级面试_2_IPC相关
  • docker封禁对外端口映射
  • 【leetcode系列】567.字符串的排列(滑动窗口)
  • 情感分析方法与实践
  • 迁移学习——CycleGAN
  • 【软件测试】对于测试中的bug,我们真正了解了吗?
  • Packer-Fuzzer一款好用的前端高效安全扫描工具
  • 解决卸载TabX explorer软件后导致系统文件资源管理器无法正常使用问题
  • qt for android 使用打包sqlite数据库文件方法
  • MYBATIS大于等于、小于等于的写法
  • 基于堆叠长短期记忆网络 Stacked LSTM 预测A股股票价格走势
  • SpringCloud Alibaba Sentinel基础入门与安装
  • Arduino IDE下载、安装和配置
  • SOBEL图像边缘检测器的设计
  • Day35:2734. 执行字串操作后的字典序最小字符串
  • 【高考志愿】机械工程
  • ffmpeg将mp4转换为swf
  • 论文学习 --- RL Regret-based Defense in Adversarial Reinforcement Learning
  • 【Linux小命令】一文讲清ldd命令及使用场景
  • 自费5K,测评安德迈、小米、希喂三款宠物空气净化器谁才是高性价比之王
  • 1373. 二叉搜索子树的最大键值和
  • 基于java + Springboot 的二手物品交易平台实现
  • Shopee本土店选品有什么技巧?EasyBoss ERP为你整理了6个高效选品的方法!
  • 3D在线展览馆的独特魅力,技术如何重塑展览业的未来?
  • 基于SpringBoot的藏区特产销售平台
  • hudi系列-schema evolution(一)
  • Redis-实战篇-缓存雪崩
  • 线性代数|机器学习-P18快速下降奇异值
  • 本地离线模型搭建指南-中文大语言模型底座选择依据