欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > Soundprivacy

Soundprivacy

2025/10/15 4:35:10 来源:https://blog.csdn.net/m0_65982521/article/details/148446925  浏览:    关键词: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)控制功能开关

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词