openharmony launcher 调研笔记(03)UI 数据装配

news2024/11/24 22:31:00

最近在看launcher,把自己调研的点做个笔记,持续修改更新中个人笔记酌情参考

=========================================================================

桌面上半部分包含父子逻辑:

Column() {
        PageDesktopLayout();
}

PageDesktopLayout->GridSwiper->Swiper->SwiperPage

1.PageDesktopLayout

        此类没有需要特别注意的,只是多定一个dialogController传递给了 GridSwiper 用于长按显示设置,显示内容为settingDialog控件

2.GridSwiper

        Swiper(this.swiperController) {
            ForEach(this.pageList, (item: number, index: number) => {

                    pageList 

                    // 此数据来源于 SMARTDOCK_INIT_FINISHED 事件触发的 (上一章有提及)

                   // PageDesktopViewModelget 的 getGridList() 函数内的getAppList() 及一些列计算

                    // 最终调用 AppStorage.setOrCreate(KEY_APP_LIST, appInfo);

                   //(const KEY_APP_LIST = 'appListInfo';)

                   // 触发 updatePageList  @Watch('updatePageList'),此函数完成数据的最终加工

                      getGridList()   

                          const appInfoList = await this.getAppList();

                                1.this.mAppModel.getAppList()  //(AppModel类)

                                        this.getAppListAsync();  //(AppModel类)

                                                launcherAbilityManager.getLauncherAbilityList();                

                                                //(LauncherAbilityManager )

                                                        launcherBundleMgr.getAllLauncherAbilityInfos(

                                                                LauncherAbilityManager.CURRENT_USER_ID

                                                        )

                                                        // (innerBundleManager) 

                                                        // function getAllLauncherAbilityInfos(userId:number)

                                                           :Promise<Array<LauncherAbilityInfo>>;

                                  abilityList[i].applicationInfo.name 

                                  //(abilityList : Array<LauncherAbilityInfo>)

                                 获取数据如下 (原版有19个其中一个 为 系统应用被剔除)

                                // 系统应用 定义总字符串为 SystemApplication.SystemApplicationName

                                

                                2.this.mSettingsModel.getAppListInfo();

                                //此处数据为空时,将数据填入  (pageDesktopInfo.push(appInfo);)

                                //此处不为空时,过滤数据,删除卸载的app (pageDesktopInfo.filter)

                                3.this.addNewInstalledInfo(totalAppInfoList, pageDesktopInfo);

                                //新安装的app填入数组

                                4.this.removeBottomBarInfo(pageDesktopInfo);

                                //删除存在于dock栏的app(页面显示app和dock的app不重复)

                                5.this.removeFolderInfo(pageDesktopInfo);

                                // 删除在文件夹内的app,文件夹中的不在外部显示

                                6.this.mSettingsModel.setAppListInfo(pageDesktopInfo);

                                // 更新数据到this.mAppListInfo =appListInfo;( PageDesktopAppModeConfig )

                                // 和数据库(先删除再在insert)

                                7.AppStorage.setOrCreate('isDesktopLoadFinished', true);

                                // 设置isDesktopLoadFinished为true

                                // if (this.desktopLoadFinished) 可继续向下执行 (GridSwiper)

                        this.appendAppData(appInfoList, bundleInfoListTemp);

                                // 将app 列表里面不是隐藏app 的 添加到 bundleInfoListTemp 中

                                // 将类别设置为 appInfoList[i].typeId = CommonConstants.TYPE_APP; 

                                // 将区域设置为 appInfoList[i].area = [1, 1];

                        const folderInfoList = await this.mFolderModel.getFolderList();

                                // 获取文件夹列表

                                this.appendFolderData(folderInfoList, bundleInfoListTemp);

                                // 此处为添加,实际是从bundleInfoListTemp去除文件夹的数据 ???

                        formInfoList = await this.mFormModel.getAllFormsInfoFromRdb()

                                // 读取服务卡片数据

                        this.appendFormData(formInfoList, bundleInfoListTemp);

                                // 将卡片数据 添加到 bundleInfoListTemp 中

                        this.pagingFiltering();

                               const info = this.getAndSetLayoutInfo();

                                // 获取 Layout 显示数据 显示位置 第几页 几行 几列      

                                (

                               layoutInfo[i].typeId == CommonConstants.TYPE_FOLDER

                               layoutInfo[i].typeId == CommonConstants.TYPE_CARD        

                                appListInfo.push(this.mBundleInfoList[j]);

                                )           

                                // 分三类将数据填入 总的 appListInfo (app folder card)

                        AppStorage.setOrCreate(KEY_APP_LIST, appInfo);

                              // 触发 updatePageList 函数    (GridSwiper)

                        总的页面显示数据(pageList)装配完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1580676.html

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

相关文章

即插即用篇 | RTDETR引入Haar小波下采样 | 一种简单而有效的语义分割下采样模块

本改进已集成到 RT-DETR-Magic 框架。 下采样操作如最大池化或步幅卷积在卷积神经网络(CNNs)中被广泛应用,用于聚合局部特征、扩大感受野并减少计算负担。然而,对于语义分割任务,对局部邻域的特征进行池化可能导致重要的空间信息丢失,这有助于逐像素预测。为了解决这个问…

Collection与数据结构 二叉树(一):二叉树的性质与基本操作

1. 树形结构 1.1 概念1 (了解) 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#…

已解决:windows 下无法加载文件 xxx.ps1,因为在此系统上禁止运行脚本

目录 1&#xff0c;问题描述2&#xff0c;问题解决 1&#xff0c;问题描述 当通过 npm 全局安装依赖后&#xff08;比如 ts 对应的 tsc 命令&#xff0c;还有 pnpm&#xff09;&#xff0c;想直接使用安装的命令&#xff0c;就会报错&#xff1a; 2&#xff0c;问题解决 以管…

《QT实用小工具·二十二》多种样式导航按钮控件

1、概述 源码放在文章末尾 该项目实现了多种样式的导航按钮控件 可设置文字的左侧、右侧、顶部、底部间隔。 可设置文字对齐方式。 可设置显示倒三角、倒三角边长、倒三角位置、倒三角颜色。 可设置显示图标、图标间隔、图标尺寸、正常状态图标、悬停状态图标、选中状态图标…

P5356 [Ynoi2017] 由乃打扑克

我手把手教她打扑克 qwq 综合分析一下2个操作&#xff0c;查找区间第k小的值&#xff0c;感觉可以用主席树&#xff0c;区间修改那没事了 考虑分块做法,块长B 分析第一个操作 只需要维护数列的单调性&#xff0c;然后二分答案上二分就ok了 分析第二个操作 维护一个加法懒…

比较好玩的车子 高尔夫6

https://www.sohu.com/a/484063087_221273 四万多如愿收获手动挡高尔夫6&#xff0c;可靠性、经济性、操控性兼顾_搜狐汽车_搜狐网 2.基本上其他人也不知道到底是什么相关的车子信息

HarmonyOS 开发-自定义视图实现Tab效果

介绍 本示例介绍使用Text、List等组件&#xff0c;添加点击事件onclick,动画&#xff0c;animationTo实现自定义Tab效果。 效果预览图 使用说明 点击页签进行切换&#xff0c;选中态页签字体放大加粗&#xff0c;颜色由灰变黑&#xff0c;起到强调作用&#xff0c;同时&…

鸿蒙HarmonyOS开发实例:【简单时钟】

简单时钟 介绍 本示例通过使用[ohos.display]接口以及Canvas组件来实现一个简单的时钟应用。 效果预览 主页 使用说明 1.界面通过setInterval实现周期性实时刷新时间&#xff0c;使用Canvas绘制时钟&#xff0c;指针旋转角度通过计算得出。 例如&#xff1a;"2 * M…

第十课 Excel

最上方标题栏&#xff1a; 显示共工作薄名称&#xff0c;如果显示兼容模式是没有办法使用高级功能的。分辨高版本和低版本可以通过后缀名进行分辨&#xff1b;显示xlsx就是高版本工作薄&#xff0c;如果显示xls的话就是低版本工作薄了。如果同事老板都使用的是低版本的话我们发…

【攻防世界】Web_python_template_injection

{{}}是变量包裹标识符&#xff0c;里面存放的是一个变量&#xff0c;当你输入 http://61.147.171.105:55121/{{8*8}} 执行成功&#xff0c;说明存在模版注入。接下来&#xff0c;开始想办法编代码拿到服务器的控制台权限 。 首先&#xff0c;题目告诉我们这是一个 python 注入…

机器学习(五) -- 监督学习(2) -- k近邻

系列文章目录及链接 目录 前言 一、K近邻通俗理解及定义 二、原理理解及公式 1、距离度量 四、接口实现 1、鸢尾花数据集介绍 2、API 3、流程 3.1、获取数据 3.2、数据预处理 3.3、特征工程 3.4、knn模型训练 3.5、模型评估 3.6、结果预测 4、超参数搜索-网格搜…

【环境搭建】ubuntu工作站搭建全流程(显卡4090)

安装ubuntu22.04系统 首先&#xff0c;先压缩windows分区&#xff0c;按住Win X快捷键&#xff0c;选择磁盘管理,压缩分区&#xff0c;压缩出新的分区用于安装ubuntu22.04 windows插入系统盘&#xff0c;点击重启&#xff0c;一直按F12,选择系统盘启动方式语言选择chinese–…

AI技术将影响更长远,比如未来的就业形势

随着人工智能渗透到工作场所&#xff0c;人类将需要掌握新的工作技能。 AI作为新技术已经开始扰乱就业市场了。对于最新的AI人工智能技术&#xff0c;经济学家、教育工作者、监管机构、商业分析师以及相关领域专家预测&#xff0c;在不久的将来&#xff0c;人工智能一代将需要…

Python常用算法思想--回溯算法思想详解【附源码】

通过回溯算法解决“组合”问题、“排序”问题、“搜索”之八皇后问题、“子集和”之0-1背包问题、字符串匹配等六个经典案例进行介绍: 一、解决“组合”问题 从给定的一组元素中找到所有可能的组合,这段代码中的 backtrack_combinations 函数使用了回溯思想,调用 backtrack…

25.11 MySQL 视图

1. 常见的数据库对象 对象描述表(TABLE)存储数据的逻辑单元, 以行和列的形式存在, 列就是字段, 行就是记录.数据字典系统表, 存放数据库相关信息的表. 数据通常由数据库系统维护, 程序员通常不可修改, 只可查看.约束(CONSTRAINT)执行数据校验的规则, 用于保证数据完整性的规则…

抓住风口,快速上手RAG应用开发!

免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案」&#xff1b; 不要急着评判文章列出的观点&#xff0c;只需代入其中&#xff0c;适度…

OpenHarmony开发-连接开发板调试应用

在 OpenHarmony 开发过程中&#xff0c;连接开发板进行应用调试是一个关键步骤&#xff0c;只有在真实的硬件环境下&#xff0c;我们才能测试出应用更多的潜在问题&#xff0c;以便后续我们进行优化。本文详细介绍了连接开发板调试 OpenHarmony 应用的操作步骤。 首先&#xf…

RK3568---4G模块驱动实验

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…

【攻防世界】wife_wife

原型链污染 源码 app.post(/register, (req, res) > {let user JSON.parse(req.body)if (!user.username || !user.password) {return res.json({ msg: empty username or password, err: true })}if (users.filter(u > u.username user.username).length) {return …

iOS App Store审核要求与Flutter应用的兼容性分析

本文探讨了使用Flutter开发的iOS应用能否上架&#xff0c;以及上架的具体流程。苹果提供了App Store作为正式上架渠道&#xff0c;同时也有TestFlight供开发者进行内测。合规并通过审核后&#xff0c;Flutter应用可以顺利上架。但上架过程可能存在一些挑战&#xff0c;因此可能…