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)装配完成

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无重复的最长字串

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 问题 给定一个字符串&#xff0c;我们需要找到该字符串中的最长无重复子串的长度。 示例 让我们以一个具体的示例来说明这个问题&#…

数据结构---线性表

1&#xff0c;顺序表实现---动态分配 #include<stdlib.h> #define InitSize 10 typedef struct {int *data;//静态分配int length;int MaxSize; }SqList; void InitList(SqList& L) {L.data (int*)malloc(InitSize * sizeof(int));//分配空间L.length 0;L.MaxSize…

企业如何管理员工技能,提升人员管理质效?

最近总有客户来抱怨&#xff0c;传统集团由于企业规模庞大、员工分散及线下管理模式局限&#xff0c;导致HR部门工作效率不高&#xff0c;无法及时解决一线员工的岗位排班、员工技能水平变更等问题。 正好&#xff0c;最近我们有类似成功案例和大家分享一下。 我们特意邀请到…

猫头虎分享已解决Error: 解决“IndexError: list index out of range“

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 文章目录 猫头虎分享已解决Error: 解决"IndexError: list index out of range" &#x1f431;&#x1f989;&#x1f6e0;️摘要正文内容一、错误现场勘察 &#x1f575…

关于Linux内核code段被改写的原因分析

本文基于Linux-4.19.125&#xff0c; ARM V7&#xff0c;dual core。 1 code 段 Linux的code段&#xff08;或者说text段&#xff09;自_stext开始&#xff0c;到_etext结束&#xff0c;这段内容一般情况下是只读的&#xff0c;在理论上来说&#xff0c;这段数据在设备上应该…

如何在淘~宝接单和解决别人问题-java开发

如下这是一个连接&#xff1a;https://s.tb.cn/c.0vDtL3https://s.tb.cn/c.0vDtL3 解决各种问题。可付费咨询

初识C++ · 类和对象(上)

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5.类的作用域 6.类的实例化 7.类的对象大小的计算 8.类成员函数的this指针 1.面向过程和面向对象初步认识 C语言是一门面向过程的语言&#xff0c;注重的…

FPGA(Verilog)实现按键消抖

实现按键消抖功能&#xff1a; 1.滤除按键按下时的噪声和松开时的噪声信号。 2.获取已消抖的按键按下的标志信号。 3.实现已消抖的按键的连续功能。 Verilog实现 模块端口 key_filter(input wire clk ,input wire rst_n ,input wire key_in , //按下按键时为0output …

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

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

纯C语言手搓GPT-2,前OpenAI、特斯拉高管新项目火了

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 「Real men program in C.」 众所周知&#xff0c;大语言模型还在快速发展&#xff0c;应该有…

自动驾驶基础技术-无迹卡尔曼滤波UKF

自动驾驶基础技术-无迹卡尔曼滤波UKF Unscented Kalman Filter是解决非线性卡尔曼滤波的另一种思路&#xff0c;它利用Unscented Transform来解决概率分布非线性变换的问题。UnScented Kalman Filter不需要像Extended Kalman Filter一样计算Jacobin矩阵&#xff0c;在计算量大…

Vue - 你知道Vue2中对象动态新增属性,视图无法更新的原因吗

难度级别:中高级及以上 提问概率:55% 这道题面试官会这样描述,比如有这样一个场景,一个对象里有name属性,可以正常显示在页面中。但后续动态添加了一个age属性,通过调试打印发现对象里的age属性已经添加了上了,但试图中却没有展示出来,…

程序语言基础

根据希赛相关视频课程汇总整理而成&#xff0c;个人笔记&#xff0c;仅供参考。考点偏向于通用程序语言的基础概念。 程序语言基础概念 程序设计语言&#xff1a; ①低级语言 机器语言汇编语言 汇编语言&#xff1a;指令语句/伪指令语句/宏指令语句 ②高级语言 Fotrane语言&…

计算系数(acwing,数论)

题目描述&#xff1a; 给定一个多项式 (axby)^k&#xff0c;请求出多项式展开后 x^n*y^m 项的系数。 输入格式&#xff1a; 共一行&#xff0c;包含 5 个整数&#xff0c;分别为 a&#xff0c;b&#xff0c;k&#xff0c;n&#xff0c;m&#xff0c;每两个整数之间用一个空格…

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

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

vue2 父子组件通讯

父传子 父组件&#xff1a;app.vue <template><div>app 父组件<!-- 2.动态绑定定义的数据 --><LiCount :title"mytitle"></LiCount></div> </template><script> import LiCount from "./components/LiCount.…

自定义的@TableField,解决插入或更新失效

自定义的TableField&#xff0c;解决插入或更新失效 01 使用场景 需要使用到mybatisplus的自动填充时 02 配置类和扫描包 在启动类处配置扫描包&#xff0c;每次启动扫描配置类 配置类 package com.ruoyi.framework.hander;import com.baomidou.mybatisplus.core.handlers.…

c# wpf LiveCharts 饼图 简单试验

1.概要 c# wpf LiveCharts 饼图 简单试验 2.代码 <Window x:Class"WpfApp3.Window5"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schem…

YOLOv9改进策略 :小目标 | 新颖的多尺度前馈网络(MSFN) | 2024年4月最新成果

💡💡💡本文独家改进:多尺度前馈网络(MSFN),通过提取不同尺度的特征来增强特征提取能力,2024年最新的改进思路 💡💡💡创新点:多尺度前馈网络创新十足,抢先使用 💡💡💡如何跟YOLOv8结合:1)放在backbone后增强对全局和局部特征的提取能力;2)放在detect…

在Spring中使用Redis

端口怎么设置&#xff0c;看我前一篇文章 前面使用jedis&#xff0c;通过Jedis对象中各种方法来操作redis的。 此处Spring中则是通过StringRedisTemplate来操作redis。 最原始提供的类是RedisTemplate StringRedisTemplate是RedisTemplate的子类&#xff0c;专门处理文本数据的…