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.mzph.cn/news/861940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件可重用的“rule-of-three“

《软件工程的事实与谬误》《Facts and Fallacies of Software Engineering》中提到&#xff1a; 软件可重用有两个“三规则”&#xff1a; 构建可重用组件的难度是一次性组件的三倍一个可重用的组件应该在三个不同的应用程序中试用&#xff0c;然后它才会足够通用以接受到一个…

压缩wsl的磁盘占用空间

本文说的是wsl 2。 1. 关闭wsl&#xff0c;在cmd窗口中输入如下命令&#xff1a; wsl --shutdown 2. 接着输入&#xff1a;diskpart 这个命令会弹出新的窗口 3. 在新的窗口中输入&#xff1a; select vdisk file"d:\vos\unbutu\ext4.vhdx" 其中的 d:\vos\unbut…

Zoom社招前端面经

1. 了解事件循环机制么&#xff1f; JS 中的事件循环&#xff08;Event Loop&#xff09;是一种用于管理和调度异步任务执行的机制。它使得 JS 可以处理异步操作&#xff0c;如定时器、事件处理、网络请求等&#xff0c;而不会阻塞主线程的执行。 2. 说一下什么是宏任务微任务…

群晖系统百度网盘套件卸载之后无法再次安装 ContainerManager项目无法删除

前言 最近重新组了个NAS&#xff0c;在套件迁移的时候遇到个头疼的问题。在用矿神的百度网盘在迁移的时候出错了&#xff0c;于是我自己删掉baiduapp得容器和镜像然后卸载套件。不知道中间出了啥问题&#xff0c;套件是已经卸载了&#xff0c;但是群晖ContainerManager套件中的…

Adobe Indesign 操作

页面设计 页面设置 版面&#xff1a;图文和空白部分的总和。 版心&#xff1a;规划在版面中排印文本和图片的部分。 开本&#xff1a;单个页面的宽度和高度。 如图所示&#xff0c;新建文件&#xff0c;自定义是210297毫米。这个数据是开本大小。 点击“边距和分栏”&#…

Vue3学习笔记<->创建第一个vue项目

新建一个项目目录 找一个盘新建一个目录&#xff0c;我这里在D盘创建一个vuedemo目录作为项目存放的目录。使用idea打开目录。   单击ieda底部的按钮“Terminal”&#xff0c;打开命令行窗口&#xff0c;如果命令行窗口当前目录不是“vuedemo”&#xff0c;就切换到“vuedem…

抖音营销新策略:MessageBox与HubSpot集成,引领企业获客新潮流

在全球数字化浪潮中&#xff0c;抖音以其独特的短视频形式、庞大的用户群体和高度互动性&#xff0c;成为了企业出海战略中不可或缺的一环。抖音营销不仅仅是简单的内容发布和互动&#xff0c;它更是一种深度策略和创新思维的体现。今天将深入探讨抖音营销的核心价值、应用场景…

shell:使用结构化语句(for、while循环)

1. for命令 下面是bash shell中for命令的基本格式。 for var in list docommands done每次for命令遍历值列表&#xff0c;它都会将列表中的下个值赋给$test变量。$test变量可以像for 命令语句中的其他脚本变量一样使用。在最后一次迭代后&#xff0c;$test变量的值会在shell脚…

了解和解决“vcruntime140_1.dll”相关问题,有效修复vcruntime140_1.dll错误弹窗问题

在Windows操作系统中&#xff0c;经常会遇到各种DLL&#xff08;动态链接库&#xff09;错误&#xff0c;它们是Windows应用运行不可或缺的一部分。其中&#xff0c;“vcruntime140_1.dll”是一个常见的DLL文件&#xff0c;这个文件与Microsoft Visual Studio C 运行时相关联。…

使用Python Selenium,动态网页不再是难题!

目录 1、直接执行JS代码 🌐 1.1 execute_script基础用法 1.2 带参数执行JS函数 1.3 获取执行结果 2、使用execute_async_script异步执行 🔄 2.1 适用场景分析 2.2 实现异步操作示例 2.3 错误处理与调试技巧 3、JS与页面元素交互 👤 3.1 修改DOM属性 3.2 触发事…

C# 23设计模式备忘

创建型模式&#xff1a;单例&#xff08;Singleton&#xff09;模式&#xff1a;某个类只能生成一个实例&#xff0c;该类提供了一个全局访问点供外部获取该实例&#xff0c;其拓展是有限多例模式。 原型&#xff08;Prototype&#xff09;模式&#xff1a;将一个对象作为原型&…

下载和使用SLUN数据集

1. 下载数据集 网址在https://opendatalab.com/OpenDataLab/lsun/tree/main/raw/scenes 下载bedroom_val_lmdb.zip 然后解压后会又两个文件&#xff0c;一个data.mdb&#xff0c;另一个lock.mdb。 2. 使用torchvison使用LSUN数据集 我把解压后的bedroom_val_lmdb放在/home/…

Linux-笔记 udev机制介绍

目录 前言 概念 规则文件 规则文件的命名 规则文件的语法 匹配条件 赋值指令 例子 前言 由于之前利用udev机制实现了一个自动配置某功能的项目&#xff0c;所以这里做一下笔记总结&#xff0c;什么是udev&#xff1f;怎么用&#xff1f; 概念 udev其实是linux系统中一…

TypeScrip环境安装与基础

TS环境安装与基础 文章目录 一、什么是TypeScript&#xff08;微软开发的&#xff09;二、TypeScript的特性三、环境安装node安装配置详解&#xff08;常用&#xff1a;outDir&#xff0c;strict &#xff09; 四、注释方式五、数据类型 一、什么是TypeScript&#xff08;微软开…

MySQL如何定位慢查询以及使用EXPLAIN对SQL进行性能分析

在数据库的日常运维和开发中&#xff0c;SQL慢查询是一个常见且必须高度关注的问题。它不仅会影响用户体验&#xff0c;还可能对系统稳定性构成严重威胁。尤其是在数据量激增的情况下&#xff0c;如从几千到1万的数据增长到百万级&#xff0c;SQL查询的性能问题尤为突出。最近&…

iOS 其他应用的文件如何在分享中使用自己的应用打开

废话少说 一、第一步&#xff1a;先配置好plist文件 右击info.plist如下图文件打开 根据自己需要配置支持的文件类型&#xff0c;也可使用property List中配置&#xff0c;一样的 其他的文件可是参考文档&#xff1a;System-Declared Uniform Type Identifiers 可复制的代码&am…

我只有一点Python基础,对学习WebGIS开发有帮助吗?

经常有人后台私信问&#xff0c;我只有一点Python基础&#xff0c;对学习GIS开发有帮助吗&#xff1f; 关于这个问题的答案是&#xff0c;当然有&#xff01;Python适用于WebGIS开发。WebGIS是地理信息系统&#xff08;GIS&#xff09;技术与Web技术的结合&#xff0c;而Pytho…

第1章 框架学习的基石与实战策略

第1章框架学习的基石与实战策略 1.1 框架学习的引路人&#xff1a;权威教程的重要性 在编程的世界里&#xff0c;掌握一个框架就像是装备了一套精良的工具&#xff0c;这不仅能显著提升开发速度&#xff0c;还能展现一个程序员的专业水平。对于那些刚刚踏入编程领域的初学者来…

使用sorted对字典排序

有时我们需要按照字典数据的键值对进行排序&#xff0c;这个时候就可以用到sorted函数。 import operator dic{"testA":3,"testC":1,"testB":4,"testD":2} dicnsorted(dic.items(),keyoperator.itemgetter(0)) print(dicn) 比如我们要…

秋招Java后端开发冲刺——设计模式

本文介绍Java中的代理模式&#xff0c;及一些常见的模式应用。 一、Java设计模式 Java中最常见的设计模式主要有23种&#xff0c;如表所示&#xff1a; 表格&#xff1a;Java设计模式分类 类型设计模式创建型模式单例模式&#xff08;Singleton Pattern&#xff09;工厂方法…