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

Soundprivacy

  1. 蓝牙通话设备切换控制
类名:HandsFreeProfileOutputPreferenceController 功能:
在通话状态下切换 HFP(Hands-Free Profile)和 HAP(Hearing Aid Profile)连接的蓝牙设备
关键方法:
onPreferenceChange():处理设备切换逻辑
findActiveDevice():查找当前激活的蓝牙设备(支持 Hearing Aid/LeAudio/Headset)
setActiveBluetoothDevice():设置活跃设备(通过 HearingAidProfile 或 HeadsetProfile)
  1. 媒体控件设置
核心类:
MediaControlsPreferenceController
控制媒体控件恢复功能的开关(通过 MEDIA_CONTROLS_RESUME 系统设置)
MediaControlsLockScreenPreferenceController
控制锁屏界面是否显示媒体控件(通过 MEDIA_CONTROLS_LOCK_SCREEN 系统设置)
MediaControlsRecommendationController
管理媒体控件的推荐功能开关(通过 MEDIA_CONTROLS_RECOMMENDATION 系统设置)
共同特性:
继承 TogglePreferenceController,实现开关逻辑
通过 Secure 系统设置存储状态(Settings.Secure.putInt/getInt)
  1. 媒体输出设备控制
类名:MediaOutputPreferenceController 功能:
管理媒体输出设备切换(如蓝牙音箱、耳机等)
关键逻辑:
updateState():根据当前连接的蓝牙设备(A2DP/Hearing Aid/LeAudio)更新摘要
handlePreferenceTreeClick():发送广播启动媒体输出对话框(ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG)
findActiveDevice():优先选择 Hearing Aid/LeAudio 设备,其次 A2DP 设备
  1. 设置界面整合
类名:MediaControlsSettings 功能:
作为媒体控制设置的入口界面(DashboardFragment)
加载布局 R.xml.media_controls_settings
提供搜索索引支持(@SearchIndexable)
  1. 父菜单摘要控制
类名:MediaControlsParentPreferenceController 功能:
显示媒体控件设置的父菜单摘要
根据 MEDIA_CONTROLS_RESUME 的值动态显示“显示播放器”或“隐藏播放器”

privacy

AccessibilityUsagePreferenceController管理 ​​“无障碍服务使用情况”​​ 设置项的控制器

updateState更新偏好项的显示状态
 getAvailabilityStatus()决定设置项是否显示在设置界面
getSummary()动态生成摘要文本,显示已启用的无障碍服务数量。

AppDataSharingUpdatesPreferenceController控制 ​​“应用数据共享更新”​​ 设置项可见性

getAvailabilityStatus()决定该设置项是否可见

CameraToggleController摄像头开关控制模块​ 

工作流程

  1. 初始化
  • 设置界面通过 PreferenceFragment 加载此控制器,传入上下文(Context)和偏好项唯一键(preferenceKey)。
  • 控制器通过 SensorPrivacyManagerHelper 监听摄像头传感器的隐私状态变化。
  1. 状态更新
  • 当用户点击开关时,基类 SensorToggleController 调用 SensorPrivacyManagerHelper.setSensorBlocked() 修改摄像头状态。
  • 若设备管理员启用 DISALLOW_CAMERA_TOGGLE 限制,开关会被禁用(灰色不可点击)。
  1. 与系统服务交互
  • 最终通过 SensorPrivacyManager 系统服务修改全局状态:

EnableContentCapturePreferenceController 控制用户是否允许系统级内容捕获功能(如自动填充表单、文本识别等),并受设备管理员策略限制

**isChecked():获取当前开关状态**​
setChecked(boolean isChecked):更新开关状态
 可用性控制:getAvailabilityStatus()
getSliceHighlightMenuRes() 界面高亮标识

EnableContentCaptureWithServiceSettingsPreferenceController内容捕获功能的高级控制器

updateState 动态更新Preference的跳转目标

EnableContentCaptureWithServiceSettingsPreferenceController中负责内容捕获功能的增强型控制器 

开关状态管理:isChecked、setChecked
动态更新设置项:updateState
可见性控制:getAvailabilityStatus
菜单分类定位getSliceHighlightMenuRes
点击事件处理handlePreferenceTreeClick

LocationToggleController管理位置服务全局开关的核心控制器 

onLocationModeChanged 位置状态监听回调
displayPreference UI绑定与初始化

MicToggleController控制麦克风全局开关的核心控制器

getSensor 传感器类型定义
getDeviceConfigKey 设备配置键

PrivacyDashboardFragment隐私的主界面集中管理所有隐私相关设置 

SensorToggleController,一个用于管理传感器开关的基类控制器。它处理传感器的隐私设置(如麦克风、摄像头等)的开启/关闭状态,并负责更新UI和响应状态变化。

1. 可用性状态 (getAvailabilityStatus)
2. 开关状态 (isChecked)
3. 设置开关状态 (setChecked)
4. 显示设置项 (displayPreference)
onStart在生命周期开始时,注册传感器阻止状态变化的监听器。
onStop在生命周期结束时,移除监听器。
当传感器状态改变时,更新UI设置项的状态。 (onSensorPrivacyChanged)
菜单高亮 (getSliceHighlightMenuRes)

ShowClipAccessNotificationPreferenceController 类,

它用于控制是否显示剪贴板访问通知的开关。
这个控制器继承自  TogglePreferenceController  并实现了  LifecycleObserver ,因此它可以感知生命周期事件
  1. 成员变量:
  • mDeviceConfigListener:用于监听 DeviceConfig 中命名空间为 CLIPBOARD 的配置变化。
  • mDefault:存储从 DeviceConfig 获取的默认值(布尔值)。
  • mPreference:对应的 Preference 对象。
  1. 构造方法:
  • 初始化时调用 updateConfig() 来获取当前的默认值。
  1. isChecked() 方法:
  • 从 Settings.Secure 中读取 CLIPBOARD_SHOW_ACCESS_NOTIFICATIONS 的值。
  • 如果设置中没有值,则使用从 DeviceConfig 获取的默认值 mDefault。
  • 返回该设置是否开启(非0表示开启)。
  1. setChecked() 方法:
  • 将用户的选择(开启或关闭)写入 Settings.Secure.CLIPBOARD_SHOW_ACCESS_NOTIFICATIONS。
  1. getAvailabilityStatus() 方法:
  • 返回 AVAILABLE,表示此设置项可用。
  1. displayPreference() 方法:
  • 从 PreferenceScreen 中根据键找到 Preference 并保存到 mPreference。
  1. getSliceHighlightMenuRes() 方法:
  • 返回此设置项所属的菜单分类(隐私)。
  1. 生命周期方法:
  • onStart():在生命周期开始时注册 DeviceConfig 的监听器。
  • onStop():在生命周期结束时移除监听器。
  1. updateConfig() 方法:
  • 从 DeviceConfig 中读取最新的配置,更新 mDefault 值。
  • 然后更新 Preference 的状态(因为默认值可能改变,需要刷新显示)。

WorkPolicyInfoPreferenceController

控制一个显示工作政策信息的偏好设置项
主要功能:
  1. 根据条件判断是否显示该设置项(通过getAvailabilityStatus方法)。
  2. 当用户点击该设置项时,触发显示工作政策信息(通过handlePreferenceTreeClick方法)。
详细解释:
  1. 成员变量:
  • mEnterpriseProvider:企业隐私特性提供者,用于获取企业相关的隐私信息。
  1. 构造函数:
  • 初始化mEnterpriseProvider,通过FeatureFactory获取企业隐私特性提供者的实例。
  1. getAvailabilityStatus()方法:
  • 判断该设置项是否可用(显示)。
  • 条件:如果安全中心(SafetyCenter)未启用,并且设备上有工作政策信息(即设备被企业管理员管理,并且管理员设置了工作政策信息),则显示该设置项(返回AVAILABLE)。
  • 否则,返回UNSUPPORTED_ON_DEVICE(不在设置中显示)。
  1. handlePreferenceTreeClick(Preference preference)方法:
  • 当用户点击设置项时,系统会调用此方法。
  • 首先判断点击的偏好设置项的key是否与本控制器的key一致。
  • 如果一致,则调用mEnterpriseProvider.showWorkPolicyInfo()方法显示工作政策信息,并返回true(表示已处理点击事件)。
  • 否则,返回false(表示未处理)。 

system

  1. 系统设置仪表盘(SystemDashboardFragment)
作用:作为系统设置的主入口,聚合多个系统相关选项
关键逻辑:
使用 R.xml.system_dashboard_fragment 加载偏好设置布局
动态控制「高级」按钮显示:当隐藏项仅 1 个时自动展开 (getVisiblePreferenceCount)
条件性显示 Aware 功能禁用提示对话框 (showRestrictionDialog)
搜索索引:通过 SEARCH_INDEX_DATA_PROVIDER 实现搜索支持
  1. 重置选项模块(ResetDashboardFragment)
功能:整合系统级重置操作入口,包含:
网络重置 (NetworkResetPreferenceController)
恢复出厂设置 (FactoryResetPreferenceController)
重置应用偏好 (ResetAppPrefPreferenceController)
eSIM 数据擦除 (EraseEuiccDataController)
条件控制:
SIM 可见时显示 eSIM 擦除选项 (SubscriptionUtil.isSimHardwareVisible)
跳过初始设置向导 (shouldSkipForInitialSUW)
  1. 恢复出厂设置控制器(FactoryResetPreferenceController)
// 关键逻辑: @Override public boolean isAvailable() { return mUm.isAdminUser() || Utils.isDemoUser(mContext); // 仅管理员或演示用户可见 } @Override public boolean handlePreferenceTreeClick(Preference p) { startActivity(Settings.FactoryResetActivity.class); // 跳转重置页面 }
  1. 系统更新控制器(SystemUpdatePreferenceController)
动态状态显示:
switch (updateInfo.getInt(SystemUpdateManager.KEY_STATUS)) { case STATUS_WAITING_DOWNLOAD: // 不同状态显示不同摘要 return R.string.android_version_pending_update_summary; case STATUS_IDLE: return Build.VERSION.RELEASE_OR_PREVIEW_DISPLAY; }
运营商定制:通过 ciActionOnSysUpdate 处理运营商特定的系统更新行为
  1. 代码结构特点
分层架构:
Fragment 负责 UI 展示
PreferenceController 处理业务逻辑
通过 @SearchIndexable 实现统一搜索
条件可见性:
使用 isAdminUser() 控制管理员权限
通过资源布尔值(如 config_show_system_update_settings)控制功能开关
http://www.lqws.cn/news/151201.html

相关文章:

  • hbase资源和数据权限控制
  • 通过BUG(prvIdleTask、pxTasksWaitingTerminatio不断跳转问题)了解空闲函数(prvIdleTask)和TCB
  • 8.axios Http网络请求库(1)
  • Cilium动手实验室: 精通之旅---4.Cilium Gateway API - Lab
  • C# 中的 IRecipient
  • Vue事件总线
  • Cad 反应器 cad c#二次开发
  • 网络测试实战:金融数据传输的生死时速
  • 第16期_网站搭建_Go个人版网络验证 虚拟主机搭建笔记 不推荐没卡密没完全搭建成功
  • 26考研 | 王道 | 计算机组成原理 | 三、存储系统
  • Selenium常用函数介绍
  • C++自定义简单的内存池
  • App使用webview套壳引入h5(三)——解决打包为app后在安卓机可物理返回但是在苹果手机无法测滑返回的问题
  • C++学习-入门到精通【14】标准库算法
  • 996引擎-自定义装备/道具:限时装备、限时道具
  • 【Linux】 Linux 进程控制
  • mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
  • elementUI点击浏览table所选行数据查看文档
  • .net Span类型和Memory类型
  • 中国森林地上和地下植被碳储量数据集(2002~2021)
  • 在 Oracle 中,创建不同类型索引的 SQL 语法
  • Neo4j图数据库管理:原理、技术与最佳实践
  • MDK程序调试
  • 五、查询处理和查询优化
  • Spring Boot + Elasticsearch + HBase 构建海量数据搜索系统
  • Spring Boot 缓存注解详解:@Cacheable、@CachePut、@CacheEvict(超详细实战版)
  • 【Linux篇】0基础之学习操作系统进程
  • Selenium 查找页面元素的方式
  • 【hadoop】Flink安装部署
  • 华为OD最新机试真题-小明减肥-OD统一考试(B卷)