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

QS菜单栏的安全与隐私Tile组件(GMS中的)加载逻辑

/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java

1.开机下拉QS菜单栏得安全与隐私Tile组件(mSafetySpec )初始化好了

public AutoTileManager(Context context, AutoAddTracker.Builder autoAddTrackerBuilder,QSHost host,@Background Handler handler,SecureSettings secureSettings,HotspotController hotspotController,DataSaverController dataSaverController,ManagedProfileController managedProfileController,NightDisplayListenerModule.Builder nightDisplayListenerBuilder,CastController castController,ReduceBrightColorsController reduceBrightColorsController,DeviceControlsController deviceControlsController,WalletController walletController,SafetyController safetyController,@Named(RBC_AVAILABLE) boolean isReduceBrightColorsAvailable) {mContext = context;mHost = host;mSecureSettings = secureSettings;mCurrentUser = mHost.getUserContext().getUser();mAutoTracker = autoAddTrackerBuilder.setUserId(mCurrentUser.getIdentifier()).build();mHandler = handler;mHotspotController = hotspotController;mDataSaverController = dataSaverController;mManagedProfileController = managedProfileController;mNightDisplayListenerBuilder = nightDisplayListenerBuilder;mCastController = castController;mReduceBrightColorsController = reduceBrightColorsController;mIsReduceBrightColorsAvailable = isReduceBrightColorsAvailable;mDeviceControlsController = deviceControlsController;mWalletController = walletController;mSafetyController = safetyController;String safetySpecClass;try {safetySpecClass =context.getResources().getString(R.string.safety_quick_settings_tile_class);if (safetySpecClass.length() == 0) {safetySpecClass = null;}} catch (Resources.NotFoundException | NullPointerException e) {safetySpecClass = null;}mSafetySpec = safetySpecClass != null ? CustomTile.toSpec(new ComponentName(mContext.getPackageManager().getPermissionControllerPackageName(), safetySpecClass)) : null;}

2.检查mSafetySpec是否在pms中存在(这个是谷歌的组件,得预置了GMS得才存在),如果存在就开始init把mSafetySpec加载进QS面板

 protected void startControllersAndSettingsListeners() {if (!mAutoTracker.isAdded(HOTSPOT)) {mHotspotController.addCallback(mHotspotCallback);}if (!mAutoTracker.isAdded(SAVER)) {mDataSaverController.addCallback(mDataSaverListener);}mManagedProfileController.addCallback(mProfileCallback);mNightDisplayListener = mNightDisplayListenerBuilder.setUser(mCurrentUser.getIdentifier()).build();if (!mAutoTracker.isAdded(NIGHT)&& ColorDisplayManager.isNightDisplayAvailable(mContext)) {mNightDisplayListener.setCallback(mNightDisplayCallback);}if (!mAutoTracker.isAdded(CAST)) {mCastController.addCallback(mCastCallback);}if (!mAutoTracker.isAdded(BRIGHTNESS) && mIsReduceBrightColorsAvailable) {mReduceBrightColorsController.addCallback(mReduceBrightColorsCallback);}// We always want this callback, because if the feature stops being supported,// we want to remove the tile from AutoAddTracker. That way it will be re-added when the// feature is reenabled (similar to work tile).mDeviceControlsController.setCallback(mDeviceControlsCallback);if (!mAutoTracker.isAdded(WALLET)) {initWalletController();}if (mSafetySpec != null) {if (!mAutoTracker.isAdded(mSafetySpec)) {initSafetyTile();}mSafetyController.addCallback(mSafetyCallback);}int settingsN = mAutoAddSettingList.size();for (int i = 0; i < settingsN; i++) {if (!mAutoTracker.isAdded(mAutoAddSettingList.get(i).mSpec)) {mAutoAddSettingList.get(i).setListening(true);}}}

3.开始往mHost中添加mSafetySpec组件Tile

    private void initSafetyTile() {if (mSafetySpec == null || mAutoTracker.isAdded(mSafetySpec)) {return;}mHost.addTile(CustomTile.getComponentFromSpec(mSafetySpec), true);mAutoTracker.setTileAdded(mSafetySpec);}
http://www.lryc.cn/news/614309.html

相关文章:

  • 使用 C# 通过 .NET 框架开发应用程序的安装与环境配置
  • Godot ------ 通过鼠标对节点进行操作
  • 僵尸进程、孤儿进程、进程优先级、/proc 文件系统、CRC 与网络溢出问题处理(实战 + 原理)
  • 强制用户更改WordPress密码的重要性及实现方法
  • Linux 内存管理之page folios
  • 电脑定时开关机终极指南
  • 静态路由主备切换
  • 2025产品经理接单经验分享与平台汇总
  • 腾讯云 CodeBuddy IDE:可以使用gpt5的ide
  • 操作系统-实验-进程
  • CVRF 是什么?微软弃用 MS 编号后,网络安全的下一个标准
  • 文件结构树的├、└、─ 符号
  • Java文件操作和IO
  • R语言代码加密(1)
  • 无人机航拍数据集|第9期 无人机风力电机表面损伤目标检测YOLO数据集2995张yolov11/yolov8/yolov5可训练
  • 【前端】纯代码实现Power BI自动化
  • 深入解析K-means聚类:从原理到调优实战
  • Milvus向量数据库版本升级
  • Agent 开发进阶路线:从基础功能到自主决策
  • [Python]代码随想录Day35[动态规划][背包问题]
  • ELK+Redis+Nginx多节点部署实战:从日志收集到可视化分析
  • Docker容器部署discuz论坛与线上商城
  • Centos7升级redis
  • springboot读取编译时传递的参数
  • Spring AI 系列之四十 - Spring AI Alibaba-集成百炼智能体
  • 用browse实现菜单功能的方法
  • 《在 Spring Boot 中安全使用 Qwen API-KEY:环境变量替代明文配置的最佳实践》
  • 一文可视化分析2025年6月计算机视觉顶刊IJCV前沿热点
  • 数据结构(16)排序(上)
  • 代理模式在C++中的实现及面向对象设计原则的满足