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

最近在看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.mzph.cn/news/803159.shtml

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

相关文章

25.11 MySQL 视图

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

2024马来西亚电商选品博览会

2024马来西亚电商选品博览会 展会概况 展会名称&#xff1a;2024马来西亚电商选品博览会 主办单位&#xff1a;广东进出口商会 时间:2024.11.29-12.1 地点&#xff1a;马来西亚国际贸易展览中心(MITEC) 展览面积&#xff1a;10000平方米 展会简介 2024马来西亚跨境电商选…

包和final.Java

1&#xff0c;包 包就是文件夹。用来管理不同功能的Java类&#xff0c;方便后期代码的维护。 &#xff08;1&#xff09;包名的规则是什么&#xff1f; 公司域名反写报的作用&#xff0c;需要全部英文小写&#xff0c;见名知意。com.itheima.domain &#xff08;2&#xff…

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

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

蓝桥杯第十一届c++大学B组详解

目录 1.字符串排序 2.门牌制作 3.即约分数 4.蛇型填数 5.跑步锻炼 6.七段码 7.成绩统计 8.回文日期 9.字串分值和 10.平面切分 1.字符串排序 题目解析&#xff1a;这个题目真没搞懂。有会的大佬教我一下谢谢。 2.门牌制作 题目解析&#xff1a;出过超级多这类题目&am…

NumPy进阶(二)

2. NumPy进阶(二) 2.1 Numpy数组操作 2.1.1 添加元素 numpy.append 函数在数组的末尾添加值。 追加操作会分配整个数组&#xff0c;并把原来的数组复制到新数组中 注意&#xff1a; 插入的维度要保证所有数组的长度是相同的如果没有指定轴&#xff0c;数组会被扁平处理 ndarr…

教你如何玩转副业:开启编程副业新篇章

前言 在浩瀚的编程海洋中&#xff0c;C语言以其简洁、高效、贴近硬件的特性&#xff0c;成为无数程序员心中的“白月光”。作为一位程序员&#xff0c;如果你不仅掌握了这门语言的精髓&#xff0c;更渴望通过副业来挑战自我、实现价值。那么&#xff0c;如何用C语言开启你的副…

亚信安慧AntDB:在数据的宇宙中探索无限可能

亚信安慧AntDB数据库探索出自主可控的数据库架构&#xff0c;在架构层面消除应用对特定数据库的依赖。它以其稳定可靠的性能和高度可伸缩性而备受赞誉。AntDB数据库架构通过引入创新的分布式体系结构&#xff0c;充分利用集群资源&#xff0c;实现数据的高效分布和快速存取。 …

【计算机考研】408算法大题怎么练?

先说结论&#xff1a;基础阶段学好各个数据结构与&#xff0c;重点是数组、链表、树、图。然后强化阶段突破算法提 在基础阶段&#xff0c;并不需要过于专门地练习算法。相反&#xff0c;基础阶段的重点应该放在对各种数据结构原理的深入理解上。在我个人的经验中&#xff0c;…

HarmonyOS实战开发-如何使用 geolocation 实现获取当前位置经纬度

介绍 本示例使用 geolocation 实现获取当前位置的经纬度,然后通过 http 将经纬度作为请求参数,获取到该经纬度所在的城市。通过 AlphabetIndexer 容器组件实现按逻辑结构快速定位容器显示区域。 效果预览 使用说明 1.进入主页,点击国内热门城市,配送地址会更新为选择的城…

【Erlang】【RabbitMQ】Linux(CentOS7)安装Erlang和RabbitMQ

一、系统环境 查版本对应&#xff0c;CentOS-7&#xff0c;选择Erlang 23.3.4&#xff0c;RabbitMQ 3.9.16 二、操作步骤 安装 Erlang repository curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash安装 Erlang package s…

CAXA电子图版2019版 下载地址及安装教程

CAXA电子图板是一款由国内软件公司CAXA开发的专业CAD&#xff08;计算机辅助设计&#xff09;软件。它主要用于绘制和编辑各种类型的二维图纸和工程图纸&#xff0c;广泛应用于建筑、机械、电气和电子等行业。 CAXA电子图板具有以下主要功能和特点&#xff1a; 二维绘图&…

Godot 常用UI+布局容器简单介绍

文章目录 前言相关链接Canvasitem&#xff1a;画布Control&#xff1a;UI布局基类Container&#xff1a;布局容器基类AspectRatioContainer&#xff1a;伸缩居中布局BoxContainer&#xff1a;盒子布局ColorPicker:取色器 CenterContainer&#xff1a;不伸缩居中FlowContainer&a…

Java 那些诗一般的 数据类型 (下篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能接…

【RAG实践】Rerank,让大模型 RAG 更近一步

RAGRerank原理 上一篇【RAG实践】基于LlamaIndex和Qwen1.5搭建基于本地知识库的问答机器人 我们介绍了什么是RAG&#xff0c;以及如何基于LLaMaIndex和Qwen1.5搭建基于本地知识库的问答机器人&#xff0c;原理图和步骤如下&#xff1a; 这里面主要包括包括三个基本步骤&#…

3.1k Star的特斯拉数据伴侣神器

微信公众号:[开源日记],分享10kStart的优质开源项目。 TeslaMate 适用于你的 Tesla 的功能强大的自托管数据记录器。 用 Elixir 编写数据存储在 Postgres 数据库使用 Grafana 进行可视化和数据分析车辆数据发布到本地 MQTT Broker GitHub数据 3.1k stars121 watching458 forks…

2023一个前端人的杂谈

酒香也怕巷子深 年底提车,回河北过年,一路总是旅游的牌子,后来去满城滑雪,随拍了几张照片,才更加感受河北的魅力。 感觉仅仅是这一抹黄昏,就让这一行物超所值了,原来那句宣传语所言非虚:这么近,那么美,周末到河北,然而我认为实际的好处,可能不止如此。 作为一个出…

记录一次hss不能防护主机的问题

场景&#xff1a;hss的控制台显示不在防护中&#xff0c;其他云主机并没有这个情况。 故障发生的时间是昨天下午15点半左右&#xff0c;运维同事做了重启网卡的操作。service network restart 排查分析&#xff1a; 于是仔细的查看日志&#xff0c;发现报错如下&#xff1a…

SpringBoot学习之Kibana下载安装和启动(Mac版)(三十二)

一、简介 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。 …

ChatGPT与生成式AI:教育领域内新的浪潮与挑战

随着ChatGPT和其他生成式AI技术&#xff0c;如GPT-3.5、GPT-4的出现&#xff0c;我们正见证教育领域一场前所未有的变革浪潮。这些技术不仅推动了教育方式的进步&#xff0c;也为学习者带来了全新的机遇和挑战。 NO.1教育变革的新浪潮 生成式AI技术&#xff0c;特别是ChatGPT&…