openharmony launcher 调研笔记(01)数据初始化

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

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

初始化MainAbility

● common 等 包以 三方库形式 被引入使用

在每个包中的oh-package.json5 文件有配置

{
  "devDependencies": {},
  "name": "@ohos/common",
  "description": "a npm package which contains common function",
  "main": "index.ts",
  "version": "1.0.0",
  "dependencies": {}
}

在module.json5文件中配置了类型

{
  "module": {
    "name": "launcher_appcenter",
    "type": "har",
    "deviceTypes": [
      "default",
      "tablet"
    ]
  }
}

可以如下方式被引入,并使用

import {
  windowManager。。。
} from '@ohos/common';

● 项目入口在product 目录下,目前分为pad和phone两个版本,我关注的是手机端

   phone/src/main/module.json5 下 配置了 起始的 MainAbility

● export default class MainAbility extends ServiceExtension 

   MainAbility 继承自ServiceExtension 

● initLauncher 函数进行了一系列 初始化

    let dbStore = RdbStoreManager.getInstance(); //获取数据库实例
    await dbStore.initRdbConfig(); // 初始化 mRdbStore
    await dbStore.createTable(); // 创建表(不存在的情况下)

    数据库在手机位置:/data/app/el1/100/database/com.ohos.launcher/phone_launcher/rdb

    数据库名字:Launcher.db

       

     手机目前没有看到sqlite3 命令,导出到pc 数据可以看到为如下图:      

● 初始化收拾导航 

  this.startGestureNavigation(); // 此函数内部根据显示的宽高设置屏幕宽高,根据配置设置导航栏是否显示

          gestureNavigationManage.initWindowSize(dis);

                  settingsDataManager.createDataShareHelper();

                        dataShare.createDataShareHelper

                                globalThis.sGestureNavigationManager.getGestureNavigationStatus();

                                        private getGestureNavigationStatus()  // applications_launcher\feature\gesturenavigation\src\main\ets\default\common\GestureNavigationManager.ts

                                                gestureNavigationStatus = this.getValue(); // settingsDataManager.getValue(this.helper, CommonConstants.NAVIGATION_BAR_STATUS_KEY, '1');

                                                        AppStorage.setOrCreate('NavigationBarStatusValue', gestureNavigationStatus === '0' ? true : false);

                                                

● 创建显示主页

//DESKTOP_WINDOW_NAME = 'EntryView'; 

//applications_launcher\product\phone\src\main\ets\pages\EntryView.ets

windowManager.createWindow(globalThis.desktopContext, windowManager.DESKTOP_WINDOW_NAME,
      windowManager.DESKTOP_RANK, 'pages/' + windowManager.DESKTOP_WINDOW_NAME, true, registerWinEvent);

● 创建最近使用应用页

    windowManager.createRecentWindow();    

    //applications_launcher\product\phone\src\main\ets\pages\RecentView.ets

● 初始化事件(点击事件等)

this.registerInputConsumer();

加入了两个事件的监听

KeyCode.KEYCODE_HOME  home键

KeyCode.KEYCODE_FUNCTION  最近使用应用键

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

EntryView解析

//applications_launcher\product\phone\src\main\ets\pages\EntryView.ets

---------------------------------------------------------------------------------------------------------------------------------

aboutToAppear()函数中 的

         this.mStage.onCreate(); 通过BaseModulePreLoader的各个子类的load

(loadConfig,loadData),初始化了各种配置和数据

         初始化的配置和数据有:

                 1.initPhoneConfig

                        初始化配置:

                            a.PhoneSmartDockLayoutConfig // dock栏数据:联系人,图片,设置,短信

                                // 此类中会在父类,子类各种调用,最终数据还是构造中的数据

                                        protected constructor() {
                                            super();
                                            this.mDockLayoutInfo = phonePresetDockItem;
                                          }

                                const phonePresetDockItem = [
                                          {
                                            itemType: CommonConstants.TYPE_APP,
                                            bundleName: 'com.ohos.contacts',
                                            abilityName: 'com.ohos.contacts.MainAbility',
                                            moduleName: 'entry',
                                            editable: true,
                                          } 。。。

                                ]

                                后面SmartDock类中最终调用getResidentList()对上述数据更新

                             b.PhoneFolderLayoutConfig  // 桌面文件夹比例: 桌面3×3 打开 4×3 。。。

                                同上, // 此类中会在父类,子类各种调用,最终数据还是构造中的数据

                                  protected constructor() {
                                    super();
                                    this.mFolderLayoutInfo = phoneFolderLayoutInfo;
                                  }

                                const phoneFolderLayoutInfo = {
                                  folderLayoutTable: {
                                    id: 0,
                                    layout: '3X3',
                                    name: '3X3',
                                    row: 3,
                                    column: 3,
                                    area: [2, 2],
                                    checked: false,
                                  }。。。

                                ]

                             c.PhoneFormLayoutConfig // 桌面卡片大小: 1×2,2×2 。。。

                                同上, // 此类中会在父类,子类各种调用,最终数据还是构造中的数据

                                protected constructor() {
                                    super();
                                    this.mFormLayoutInfo = phoneFormLayoutInfo;
                                }

                                const phoneFormLayoutInfo = {
                                  formLayoutDimension1X2: {
                                    id: 0,
                                    layout: '1X2',
                                    name: '1X2',
                                    row: 1,
                                    column: 2,
                                    area: [1, 2],
                                    checked: false,
                                  }。。。

                                ]

                 2.LauncherLayoutPreLoader

                          load(): void {
                              this.loadConfig();
                              this.loadData();
                          }

                        初始化配置(loadConfig):

                        addConfigToManager

                        //此处根本上 是globalThis.PhoneLauncherLayoutStyleConfigInstance

                          = new PhoneLauncherLayoutStyleConfig(); 并插入到全局存储中

                        初始化数据(loadData):

                        LayoutViewModel.getInstance().setDevice(CommonConstants.DEFAULT_DEVICE_TYPE); //  此处是initScreen配置基础数据  setDevice // AppStorage.setOrCreate('isPad', this.mIsPad); 此处为何是 isPad 当做 key 不太清楚

                        initScreen:

                                初始化了屏幕宽高,状态栏、导航栏 高度等数据

                 3.SmartDockPreLoader

                  初始化配置:    

                   a.SmartDockLayoutConfig 同 PhoneSmartDockLayoutConfig

                   globalThis.SmartDockLayoutConfig = new SmartDockLayoutConfig();

                   globalThis.SmartDockLayoutConfig.initConfig();

                   b.SmartDockModeConfig //目前看无意义

                    globalThis.SmartDockModeConfig = new SmartDockModeConfig();
                    globalThis.SmartDockModeConfig.initConfig(); 

                   c.SmartDockStyleConfig // 初始化dock 栏显示数据 高度,背景等

                    globalThis.SmartDockStyleConfig = new SmartDockStyleConfig();    

                    globalThis.SmartDockStyleConfig.initConfig();

                   初始化数据:无

                4.PageDesktopPreLoader

                 初始化配置:    

                  a.PageDesktopLayoutConfig // 桌面布局配置

                        private static readonly DEFAULT_LAYOUT_INFO: any = {
                            layoutDescription: {
                              pageCount: PageDesktopLayoutConfig.DEFAULT_PAGE_COUNT, //  1
                              row: PageDesktopLayoutConfig.DEFAULT_ROW_COUNT, // 5
                              column: PageDesktopLayoutConfig.DEFAULT_COLUMN_COUNT //4
                            },
                            layoutInfo: []
                          };

                    b.PageDesktopModeConfig // 桌面模式配置

                        const persistConfig = {
                              appStartPageType: this.mAppStartPageType, // Grid
                              gridConfig: this.mGridConfig, // 0
                              deviceType: this.mDeviceType // phone
                        };

                     c.PageDesktopAppModeConfig // 桌面应用程序模式

                                private static readonly DEFAULT_LAYOUT_INFO: any = [];

                                private mAppListInfo: any =

                                         PageDesktopAppModeConfig.DEFAULT_LAYOUT_INFO;

                                // 通过数据库查询获取的为空

                                loadPersistConfig(): void {
                                    let defaultConfig = super.loadPersistConfig();
                                    globalThis.RdbStoreManagerInstance.queryDesktopApplication()
                                      .then((config) => {
                                        Log.showDebug(TAG, 'loadPersistConfig configFromRdb success.');
                                        this.mAppListInfo = config;
                                    }).catch((err) => {
                                      Log.showError(TAG, ` err: ${err.toString()}`);
                                      this.mAppListInfo = defaultConfig;
                                    });
                                  }

                        d.PageDesktopGridStyleConfig // 桌面 桌面布局配置   行数列数等        

                                 /**
                                   * 列数
                                */
                                mColumns = StyleConstants.DEFAULT_APP_GRID_COLUMN;

                                  /**
                                   * 行数
                                   */
                                  mRows = StyleConstants.DEFAULT_APP_GRID_ROW;

                                  。。。

                    4.PhonePageDesktopGridStyleConfig

                            第3项的d为此函数父类,重新计算上述中的一些基本数据项

                    5.BigFolderPreLoader

                            a.FolderLayoutConfig 为 第一项 b.PhoneFolderLayoutConfig  父类

                            b.BigFolderStyleConfig 大文件夹的配置项

                    6.FormPreLoader

                            a.FormLayoutConfig 为第一项 c.PhoneFormLayoutConfig 的父类 

                            b.FormStyleConfig 为卡片配置项

                     7.NumBadgeManager.getInstance().registerNumBadge();

                          角标注册(??不太确定     

        this.getWindowSize();  // 获取屏幕宽高

        this.navigationBarStatus = SettingsModel.getInstance().getValue(); // 获取导航栏状态

        this.updateScreenSize(); // 更新屏幕宽高等

        this.registerPageDesktopNavigatorStatusChangeEvent(this.mLocalEventListener); 

        // 注册导航栏状态变化函数,触发时调用updateScreenInfo更新各种配置及显示

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

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

相关文章

宏的使用(C语言详解)

在写一个代码生成可执行文件的过程需要经过编译和链接&#xff0c;编译又要经过三部&#xff1a;预处理&#xff0c;编译&#xff0c;汇编。 #define定义的变量和宏就是在预处理阶段会处理的。 一个简单的宏定义&#xff1a; #include<stdio.h>; #define Max(a,b) a>…

如何利用义乌购API实现用户个性化推荐及商品详情 API 返回值说明

用户个性化推荐 利用义乌购API实现用户个性化推荐是一个涉及多个步骤的过程&#xff0c;主要包括数据收集、用户画像构建、推荐算法选择与实施以及推荐结果的展示与反馈。以下是一个大致的流程和步骤说明&#xff1a; 一、数据收集&#xff1a; 1.用户行为数据&#xff1a;收…

如何理解单片机 pwm 控制的基本原理?

单片机PWM&#xff08;脉宽调制&#xff09;控制的基本原理&#xff0c;简而言之&#xff0c;就是通过改变脉冲信号的宽度&#xff08;占空比&#xff09;来控制模拟电路。这涉及到单片机生成一系列脉冲信号&#xff0c;每个脉冲信号的高电平持续时间和整个周期的比值&#xff…

桌面便签电脑版哪个好?好用便签是哪款

在快节奏的现代生活中&#xff0c;桌面便签软件成为了我们不可或缺的助手。它们轻便、灵活&#xff0c;能够随时记录重要事项&#xff0c;提醒我们按时完成各项任务。面对市面上众多的便签软件&#xff0c;选择一款既实用又好用的便签显得尤为重要。经过深入体验&#xff0c;我…

C++ | Leetcode C++题解之第12题整数转罗马数字

题目&#xff1a; 题解&#xff1a; const string thousands[] {"", "M", "MM", "MMM"}; const string hundreds[] {"", "C", "CC", "CCC", "CD", "D", "DC&qu…

【Angular性能优化】项目8版本加载速度缓慢、白屏时间、首页渲染性能优化方案

前言 随着业务的代码一点点增加,加上Angular的项目本身就比 vue、react 的重一些,随之而来的启动速度,更改文件后编译速度,以及打包速度也会变慢,于是乎想着优化下我们的项目。 本文章主要说的是 : 打包Angular项目的一些配置,性能优化方面的方案打包后,用户进入页面…

vue vue3 手写 动态加载组件

效果展示 一、需求背景&#xff1a; # vue3 项目涉及很多图表加载、表格加载 #考虑手写一个动态加载组件 二、实现思路 通过一个加载状态变量&#xff0c;通过v-if判断&#xff0c;加载状态的变量等于哪一个&#xff0c;动态加载组件内部就显示的哪一块组件。 三、实现效果…

Coursera上托福专项课程03:TOEFL Test-Taking Strategies 学习笔记(完结)

TOEFL Preparation Specialization Specialization Certificate TOEFL Test-Taking Strategies Course Certificate 本文是学习 TOEFL Test-Taking Strategies 这门课的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 TOEFL Preparation SpecializationTOEF…

《web应用技术》第二次课后练习

练习目的&#xff1a; 1、form表单值的获取 2、mysql数据库及表的建立&#xff08;参见视频&#xff09; 3、maven项目的建立&#xff08;参见视频&#xff09; 4、使用jdbc进行数据库的增删改查操作。&#xff08;参见源代码&#xff09; 具体如下&#xff1a; 1、继续理…

以Kotti项目为例使用pytest测试项目

在维护和构建大型项目时&#xff0c;单独一个一个手工测试代码已经不适用了&#xff0c;这时候就要用专门的测试框架进行测试。让我们以Kotti项目为例&#xff0c;用pytest这个测试框架进行实践测试吧。 使用python3.10 Ubuntu 系统 准备工作 下载和安装kotti库 pip install…

并查集python实现及题目练习

文章目录 1. 并查集概念1.1 理解并查集&#xff1a;简介与应用场景1.2 Python 实现并查集及优化策略1.3 扁平化栈实现1.4 分析并查集的时间复杂度 2. 情侣牵手3. 相似字符串4. 岛屿数量 如果想了解并查集基础推荐去看左程云大神的算法讲解&#xff0c;非常不错&#xff0c;b站和…

【一】学习TDengine-总结新技术学习的思考

学习TDengine-总结新技术学习的思考 概要 因业务场景需要我们开始接触时序数据库&#xff0c;于是开始根据以往的学习经验着手熟悉这一项新技术&#xff0c;学习也是一种技能&#xff0c;成功的人越容易成功&#xff0c;因为他们掌握了一套成功的方法&#xff0c;这里提到学习经…

【LeetCode热题100】74. 搜索二维矩阵(二分)

一.题目要求 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;…

清明寄哀思,VR云祭扫沉浸式缅怀先烈

只要拿出手机扫一扫&#xff0c;就能通过VR全景&#xff0c;沉浸式走进烈士陵园、纪念场馆&#xff0c;随场景进行同步参观&#xff0c;进行“云祭扫”。这种“云祭扫”活动一经推出就受到了广大群众的追捧&#xff0c;VR全景云祭扫以一种全新、绿色、安全的理念&#xff0c;通…

别让.[[hashtreep@waifu.club]].svh勒索病毒盯上你:一份实用的科普与防范经验

引言&#xff1a; 在数字化浪潮席卷全球的今天&#xff0c;我们享受着信息技术带来的便捷与高效。然而&#xff0c;随着我们对网络的依赖越来越深&#xff0c;网络安全问题也日益凸显。其中&#xff0c;.[[hashtreepwaifu.club]].svh勒索病毒就是一种让人闻之色变的网络威胁。它…

Mac安装Docker提示Another application changed your Desktop configuration解决方案

1. 问题描述 Mac安装Docker后&#xff0c;提示Another application changed your Desktop configuration&#xff0c;Re-apply configurations无效 2. 解决方案 在终端执行下述命令即可解决&#xff1a; sudo ln -sf /Applications/Docker.app/Contents/Resources/bin/docke…

2024/4/1—力扣—两数相除

代码实现&#xff1a; 思路&#xff1a;用减法模拟除法 // 用减法模拟除法 int func(int a, int b) { // a、b均为负数int ans 0;while (a < b) { // a的绝对值大于等于b&#xff0c;表示此时a够减int t b;int count 1; // 用来计数被减的次数// t > INT_MIN / 2:防止…

Tire树

Trie 树是一种多叉树的结构&#xff0c;每个节点保存一个字符&#xff0c;一条路径表示一个字符串。 Trie字符串统计 维护一个字符串集合&#xff0c;支持两种操作&#xff1a; I x 向集合中插入一个字符串 x&#xff1b;Q x 询问一个字符串在集合中出现了多少次。 共有 N 个…

突破外贸挑战:推荐几款优秀的CRM软件,解析解决方案

外贸企业面临的困境愈演愈烈&#xff0c;他们不仅面临着外部竞争对手以及市场的挑战&#xff0c;内部还面临着资金和管理难题的挤压。墨守成规&#xff0c;还按照之前单一的管理运营模式&#xff0c;迟早会被市场淘汰。 现在的市场趋势是企业要逐步走向精细化管理&#xff0c;将…

蓝牙学习十(扫描)

一、简介 从之前的文章中我们知道&#xff0c;蓝牙GAP层定义了四种角色&#xff0c;广播者&#xff08;Broadcaster&#xff09;、观察者&#xff08;Observer&#xff09;、外围设备&#xff08;Peripheral&#xff09;、中央设备&#xff08;Central&#xff09;。 之前的学习…