* Copyright (c) 2023-2024 Huawei Device Co., Ltd.
* Licensed under the Apache License,Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import GridLayoutItemBuilder from '../bean/GridLayoutItemBuilder';
import GridLayoutItemInfo from '../bean/GridLayoutItemInfo';
import GridLayoutItemDbBuilder from './GridLayoutItemDbBuilder';
import type rdb from '@ohos.data.relationalStore';
import { CommonConstants } from '../constants/CommonConstants';
import { commonBundleManager } from '@ohos/frameworkwrapper';
import { GridLayoutInfoEnums } from '../db/column/GridLayoutInfoColumns';
import { OverflowFormInfoUtil } from '../utils/OverflowFormInfoUtil';
const FORM_TRANSPARENT: string = '1';
* Item info of GridLayoutInfo item for database.
*/
export default class GridLayoutItemInfoDataBase {
* GridLayoutInfo: id 主键
*/
public id: number | undefined;
* GridLayoutInfo: info id 元素标识id
*/
public infoId: string | undefined;
* GridLayoutInfo: info name 元素名称
*/
public infoName: string | undefined;
* GridLayoutInfo: uri
*/
public uri: string | undefined;
* GridLayoutInfo: 文件唯一标识符
*/
public ino: string | undefined;
* GridLayoutInfo: file type
*/
public fileType: number | undefined;
* GridLayoutInfo: bigfolder id 元素所在位置(工作区,Dock区,文件夹)
* Not in bigfolder: - 100
* In a bigfolder: ID of the bigfolder.
*/
public container: number | undefined;
* GridLayoutInfo: type id 元素类型
*/
public typeId: number | undefined;
* GridLayoutInfo: width 网格内所占列数
*/
public width: number | undefined;
* GridLayoutInfo: height 网格内所占行数
*/
public height: number | undefined;
* GridLayoutInfo: page index 桌面页数索引(0 ~ n-1)
*/
public page: number | undefined;
* GridLayoutInfo: column of positions 网格上起始列
*/
public column: number | undefined;
* GridLayoutInfo: row of positions 网格上起始行
*/
public row: number | undefined;
* for lazy rotate
*/
public portraitPageIndex: number | undefined;
* for lazy rotate
*/
public portraitColumn: number | undefined;
* for lazy rotate
*/
public portraitRow: number | undefined;
* for lazy rotate
*/
public portraitWidth: number | undefined;
* for lazy rotate
*/
public portraitHeight: number | undefined;
* for lazy rotate
*/
public landscapePageIndex: number | undefined;
* for lazy rotate
*/
public landscapeColumn: number | undefined;
* for lazy rotate
*/
public landscapeRow: number | undefined;
* for lazy rotate
*/
public landscapeWidth: number | undefined;
* for lazy rotate
*/
public landscapeHeight: number | undefined;
* GridLayoutInfo bundle name. 包名
*/
public bundleName: string | undefined;
* GridLayoutInfo module name. 模块名
*/
public moduleName: string | undefined;
* GridLayoutInfo ability name. Ability名称
*/
public abilityName: string | undefined;
* GridLayoutInfo: app icon id 应用图标id
*/
public appIconId: number | undefined;
* GridLayoutInfo: app label id 应用label id
*/
public appLabelId: number | undefined;
* GridLayoutInfo icon resource.
*/
public iconResource: string | undefined;
* GridLayoutInfo: extend1
*/
public extend1: string | undefined;
* GridLayoutInfo: extend2
*/
public extend2: string | undefined;
* GridLayoutInfo: user id 用户id
*/
public userId: number | undefined;
* GridLayoutInfo: kindId
*/
public kindId: number | undefined;
* GridLayoutInfo: download_progress
*/
public downloadProgress: number = 0;
* GridLayoutInfo: app_status
*/
public appStatus: number | undefined = 0;
* GridLayoutInfo: caller_name
*/
public callerName: string | undefined;
* GridLayoutInfo: appIndex
*/
public appIndex: number | undefined;
* GridLayoutInfo: shortcutId
*/
public shortcutId?: string;
* GridLayoutInfo: intent
*/
public intent?: string;
* GridLayoutInfo: size of file/folder
*/
public size: number | undefined;
* GridLayoutInfo: Create time of file/folder
*/
public ctime: number | undefined;
* GridLayoutInfo: Modification time of file/folder
*/
public mtime: number | undefined;
public targetFormData?: string | undefined;
* GridLayoutInfo: screenId
*/
public screenId: number | undefined;
constructor() {
}
setInfo(gridLayoutItemBuilder: GridLayoutItemDbBuilder): void {
if (gridLayoutItemBuilder) {
this.id = gridLayoutItemBuilder.id;
this.infoId = gridLayoutItemBuilder.infoId;
this.infoName = gridLayoutItemBuilder.infoName;
this.uri = gridLayoutItemBuilder.uri;
this.ino = gridLayoutItemBuilder.ino;
this.fileType = gridLayoutItemBuilder.fileType;
this.container = gridLayoutItemBuilder.container;
this.typeId = gridLayoutItemBuilder.typeId;
this.width = gridLayoutItemBuilder.width;
this.height = gridLayoutItemBuilder.height;
this.page = gridLayoutItemBuilder.pageIndex;
this.column = gridLayoutItemBuilder.column;
this.row = gridLayoutItemBuilder.row;
this.portraitPageIndex = gridLayoutItemBuilder.portraitPageIndex;
this.portraitColumn = gridLayoutItemBuilder.portraitColumn;
this.portraitRow = gridLayoutItemBuilder.portraitRow;
this.portraitWidth = gridLayoutItemBuilder.portraitWidth;
this.portraitHeight = gridLayoutItemBuilder.portraitHeight;
this.landscapePageIndex = gridLayoutItemBuilder.landscapePageIndex;
this.landscapeColumn = gridLayoutItemBuilder.landscapeColumn;
this.landscapeRow = gridLayoutItemBuilder.landscapeRow;
this.landscapeWidth = gridLayoutItemBuilder.landscapeWidth;
this.landscapeHeight = gridLayoutItemBuilder.landscapeHeight;
this.bundleName = gridLayoutItemBuilder.bundleName;
this.moduleName = gridLayoutItemBuilder.moduleName;
this.abilityName = gridLayoutItemBuilder.abilityName;
this.appIconId = gridLayoutItemBuilder.appIconId;
this.appLabelId = gridLayoutItemBuilder.appLabelId;
this.iconResource = gridLayoutItemBuilder.iconResource;
this.kindId = gridLayoutItemBuilder.kindId;
this.extend1 = gridLayoutItemBuilder.extend1;
this.extend2 = gridLayoutItemBuilder.extend2;
this.userId = gridLayoutItemBuilder.userId;
this.downloadProgress = gridLayoutItemBuilder.downloadProgress ?? 0;
this.appStatus = gridLayoutItemBuilder.appStatus;
this.callerName = gridLayoutItemBuilder.callerName;
this.appIndex = gridLayoutItemBuilder.appIndex ?? 0;
this.shortcutId = gridLayoutItemBuilder.shortcutId ?? '';
this.intent = gridLayoutItemBuilder.intent ?? '';
this.size = gridLayoutItemBuilder.size ?? 0;
this.ctime = gridLayoutItemBuilder.ctime ?? 0;
this.mtime = gridLayoutItemBuilder.mtime ?? 0;
this.targetFormData = gridLayoutItemBuilder.targetFormData ?? '';
this.screenId = gridLayoutItemBuilder.screenId ?? 0;
}
}
toValuesBucket(): rdb.ValuesBucket {
return {
[GridLayoutInfoEnums.USER_ID]: this.userId,
[GridLayoutInfoEnums.INFO_ID]: this.infoId,
[GridLayoutInfoEnums.INFO_NAME]: this.infoName,
[GridLayoutInfoEnums.URI]: this.uri,
[GridLayoutInfoEnums.FILE_INO]: this.ino,
[GridLayoutInfoEnums.FILE_TYPE]: this.fileType,
[GridLayoutInfoEnums.CONTAINER]: this.container,
[GridLayoutInfoEnums.TYPE_ID]: this.typeId,
[GridLayoutInfoEnums.WIDTH]: this.width,
[GridLayoutInfoEnums.HEIGHT]: this.height,
[GridLayoutInfoEnums.PAGE_INDEX]: this.page,
[GridLayoutInfoEnums.COLUMN]: this.column,
[GridLayoutInfoEnums.ROW]: this.row,
[GridLayoutInfoEnums.PORTRAIT_PAGE_INDEX]: this.portraitPageIndex,
[GridLayoutInfoEnums.PORTRAIT_COLUMN]: this.portraitColumn,
[GridLayoutInfoEnums.PORTRAIT_ROW]: this.portraitRow,
[GridLayoutInfoEnums.PORTRAIT_WIDTH]: this.portraitWidth,
[GridLayoutInfoEnums.PORTRAIT_HEIGHT]: this.portraitHeight,
[GridLayoutInfoEnums.LANDSCAPE_PAGE_INDEX]: this.landscapePageIndex,
[GridLayoutInfoEnums.LANDSCAPE_COLUMN]: this.landscapeColumn,
[GridLayoutInfoEnums.LANDSCAPE_ROW]: this.landscapeRow,
[GridLayoutInfoEnums.LANDSCAPE_WIDTH]: this.landscapeWidth,
[GridLayoutInfoEnums.LANDSCAPE_HEIGHT]: this.landscapeHeight,
[GridLayoutInfoEnums.APP_ICON_ID]: this.appIconId,
[GridLayoutInfoEnums.APP_LABEL_ID]: this.appLabelId,
[GridLayoutInfoEnums.BUNDLE_NAME]: this.bundleName,
[GridLayoutInfoEnums.MODULE_NAME]: this.moduleName,
[GridLayoutInfoEnums.ABILITY_NAME]: this.abilityName,
[GridLayoutInfoEnums.ICON_RESOURCE]: this.iconResource,
[GridLayoutInfoEnums.KIND_ID]: this.kindId,
[GridLayoutInfoEnums.EXTEND1]: this.extend1,
[GridLayoutInfoEnums.EXTEND2]: this.extend2,
[GridLayoutInfoEnums.DOWNLOAD_PROGRESS]: this.downloadProgress,
[GridLayoutInfoEnums.APP_STATUS]: this.appStatus,
[GridLayoutInfoEnums.CALLER_NAME]: this.callerName,
[GridLayoutInfoEnums.APP_INDEX]: this.appIndex ?? 0,
[GridLayoutInfoEnums.SHORTCUT_ID]: this.shortcutId ?? '',
[GridLayoutInfoEnums.INTENT]: this.intent ?? '',
[GridLayoutInfoEnums.FILE_SIZE]: this.size ?? 0,
[GridLayoutInfoEnums.FILE_CREATE_TIME]: this.ctime ?? 0,
[GridLayoutInfoEnums.FILE_MODIFICATION_TIME]: this.mtime ?? 0,
[GridLayoutInfoEnums.TARGET_FORM_DATA]: this.targetFormData ?? '',
[GridLayoutInfoEnums.SCREEN_ID]: this.screenId ?? 0,
};
}
toGridLayoutItemInfo(): GridLayoutItemInfo {
let gridlayoutItemBuilder = new GridLayoutItemBuilder(this.id ?? 0);
if (this.typeId === CommonConstants.TYPE_CARD) {
this.fillCardInfo(gridlayoutItemBuilder);
} else if (this.typeId === CommonConstants.TYPE_FOLDER || this.typeId === CommonConstants.TYPE_REGION_FOLDER) {
this.fillFolderInfo(gridlayoutItemBuilder);
} else if (this.typeId === CommonConstants.TYPE_APP || this.typeId === CommonConstants.TYPE_SHORTCUT_ICON) {
this.fillAppInfo(gridlayoutItemBuilder);
} else if (this.typeId === CommonConstants.TYPE_FILE_FOLDER || this.typeId === CommonConstants.TYPE_REGION_FOLDER) {
this.fillFileFolderInfo(gridlayoutItemBuilder);
} else if (this.typeId === CommonConstants.TYPE_FORM_STACK) {
gridlayoutItemBuilder.setFormStackId(this.infoId);
}
this.fillBaseAreaInfo(gridlayoutItemBuilder);
this.fillBaseItemInfo(gridlayoutItemBuilder);
gridlayoutItemBuilder.setExtend1(this.extend1);
gridlayoutItemBuilder.setExtend2(this.extend2);
gridlayoutItemBuilder.setExtend3(0);
if (this.typeId === CommonConstants.TYPE_FILE_FOLDER) {
gridlayoutItemBuilder.setKeyName(this.ino);
} else if (this.typeId === CommonConstants.TYPE_REGION_FOLDER || this.typeId === CommonConstants.TYPE_FOLDER) {
gridlayoutItemBuilder.setKeyName(this.infoId);
} else {
gridlayoutItemBuilder.setKeyName(`${this.bundleName}${this.abilityName}${this.moduleName}${this.appIndex ?? 0}` +
`${this.shortcutId ?? ''}`);
}
return gridlayoutItemBuilder.buildGridLayoutItem();
}
private fillCardInfo(gridlayoutItemBuilder: GridLayoutItemBuilder): void {
gridlayoutItemBuilder.setCardId(this.infoId === undefined ? '' : this.infoId);
gridlayoutItemBuilder.setCardName(this.infoName);
gridlayoutItemBuilder.setFormConfigAbility(this.uri);
gridlayoutItemBuilder.setIsTransparent(this.extend2 === FORM_TRANSPARENT);
gridlayoutItemBuilder.setTargetFormData(this.targetFormData);
let gameCard = OverflowFormInfoUtil.parseLiveFormCardInfo(this.intent);
if (gameCard) {
gridlayoutItemBuilder.setGameCardInfo(gameCard);
}
}
private fillFolderInfo(gridlayoutItemBuilder: GridLayoutItemBuilder): void {
gridlayoutItemBuilder.setFolderId(this.infoId);
gridlayoutItemBuilder.setFolderName(this.infoName);
}
private fillAppInfo(gridlayoutItemBuilder: GridLayoutItemBuilder): void {
gridlayoutItemBuilder.setAppName(this.infoName);
gridlayoutItemBuilder.setAppIndex(this.appIndex ?? 0);
gridlayoutItemBuilder.setShortcutId(this.shortcutId);
}
private fillFileFolderInfo(gridlayoutItemBuilder: GridLayoutItemBuilder): void {
gridlayoutItemBuilder.setFileFolderName(this.infoName);
gridlayoutItemBuilder.setSize(this.size ?? 0);
gridlayoutItemBuilder.setCtime(this.ctime ?? 0);
gridlayoutItemBuilder.setMtime(this.mtime ?? 0);
}
private fillBaseAreaInfo(gridlayoutItemBuilder: GridLayoutItemBuilder): void {
gridlayoutItemBuilder.setArea(`${this.width},${this.height}`);
gridlayoutItemBuilder.setAreaType(CommonConstants.TYPE_AREA_DESKTOP);
gridlayoutItemBuilder.setPage(this.page);
gridlayoutItemBuilder.setColumn(this.column);
gridlayoutItemBuilder.setRow(this.row);
gridlayoutItemBuilder.setPortraitPageIndex(this.portraitPageIndex);
gridlayoutItemBuilder.setPortraitColumn(this.portraitColumn);
gridlayoutItemBuilder.setPortraitRow(this.portraitRow);
gridlayoutItemBuilder.setPortraitArea(this.portraitWidth, this.portraitHeight);
gridlayoutItemBuilder.setLandscapePageIndex(this.landscapePageIndex);
gridlayoutItemBuilder.setLandscapeColumn(this.landscapeColumn);
gridlayoutItemBuilder.setLandscapeRow(this.landscapeRow);
gridlayoutItemBuilder.setLandscapeArea(this.landscapeWidth, this.landscapeHeight);
}
private fillBaseItemInfo(gridlayoutItemBuilder: GridLayoutItemBuilder): void {
gridlayoutItemBuilder.setIntent(this.intent);
gridlayoutItemBuilder.setKindId(this.kindId);
gridlayoutItemBuilder.setContainer(this.container);
gridlayoutItemBuilder.setBadgeNumber(0);
gridlayoutItemBuilder.setUri(this.uri);
gridlayoutItemBuilder.setIno(this.ino ?? '');
gridlayoutItemBuilder.setFileType(this.fileType ?? 0);
gridlayoutItemBuilder.setTypeId(this.typeId);
gridlayoutItemBuilder.setBundleName(this.bundleName);
gridlayoutItemBuilder.setAbilityName(this.abilityName);
gridlayoutItemBuilder.setModuleName(this.moduleName);
gridlayoutItemBuilder.setAppIconId(this.appIconId ?? 0);
gridlayoutItemBuilder.setAppLabelId(this.appLabelId ?? 0);
gridlayoutItemBuilder.setDownloadProgress(this.downloadProgress);
gridlayoutItemBuilder.setAppStatus(this.appStatus ?? 0);
gridlayoutItemBuilder.setIconResource(this.iconResource);
gridlayoutItemBuilder.setCallerName(this.callerName);
gridlayoutItemBuilder.setInfoId(this.infoId);
gridlayoutItemBuilder.setScreenId(this.screenId);
}
public static toGridLayoutItemInfoDB(item: GridLayoutItemInfo): GridLayoutItemInfoDataBase {
let gridlayoutItemDbBuilder = new GridLayoutItemDbBuilder(0);
if (!item) {
return gridlayoutItemDbBuilder.buildGridLayoutItemDB();
}
gridlayoutItemDbBuilder.setUri(item.uri);
gridlayoutItemDbBuilder.setExtend2(item.extend2);
GridLayoutItemInfoDataBase.setTypeRelativeInfo(item, gridlayoutItemDbBuilder);
gridlayoutItemDbBuilder.setIno(item.ino);
gridlayoutItemDbBuilder.setFileType(item.fileType);
gridlayoutItemDbBuilder.setContainer(item.container === undefined ?
CommonConstants.CONTAINER_DESKTOP : item.container);
gridlayoutItemDbBuilder.setTypeId(item.typeId);
if (item.area && item.area.length === CommonConstants.AREA_LENGTH) {
gridlayoutItemDbBuilder.setWidth(item.area[0]);
gridlayoutItemDbBuilder.setHeight(item.area[1]);
}
GridLayoutItemInfoDataBase.fillDBBaseAreaInfo(gridlayoutItemDbBuilder, item);
GridLayoutItemInfoDataBase.fillDBBaseItemInfo(gridlayoutItemDbBuilder, item);
return gridlayoutItemDbBuilder.buildGridLayoutItemDB();
}
private static fillDBBaseAreaInfo(gridlayoutItemDbBuilder: GridLayoutItemDbBuilder, item: GridLayoutItemInfo): void {
gridlayoutItemDbBuilder.setPageIndex(item.page);
gridlayoutItemDbBuilder.setColumn(item.column);
gridlayoutItemDbBuilder.setRow(item.row);
gridlayoutItemDbBuilder.setPortraitPageIndex(item.portraitPage);
gridlayoutItemDbBuilder.setPortraitColumn(item.portraitColumn);
gridlayoutItemDbBuilder.setPortraitRow(item.portraitRow);
gridlayoutItemDbBuilder.setPortraitWidth(item.portraitArea?.[0] ?? -1);
gridlayoutItemDbBuilder.setPortraitHeight(item.portraitArea?.[1] ?? -1);
gridlayoutItemDbBuilder.setLandscapePageIndex(item.landscapePage);
gridlayoutItemDbBuilder.setLandscapeColumn(item.landscapeColumn);
gridlayoutItemDbBuilder.setLandscapeRow(item.landscapeRow);
gridlayoutItemDbBuilder.setLandscapeWidth(item.landscapeArea?.[0] ?? -1);
gridlayoutItemDbBuilder.setLandscapeHeight(item.landscapeArea?.[1] ?? -1);
}
private static fillDBBaseItemInfo(gridlayoutItemDbBuilder: GridLayoutItemDbBuilder, item: GridLayoutItemInfo): void {
gridlayoutItemDbBuilder.setBundleName(item.bundleName);
gridlayoutItemDbBuilder.setModuleName(item.moduleName);
gridlayoutItemDbBuilder.setAbilityName(item.abilityName);
gridlayoutItemDbBuilder.setAppIconId(item.appIconId);
gridlayoutItemDbBuilder.setAppLabelId(item.appLabelId);
gridlayoutItemDbBuilder.setKindId(item.kindId);
gridlayoutItemDbBuilder.setIconResource(item.iconResource);
gridlayoutItemDbBuilder.setExtend1(item.extend1);
gridlayoutItemDbBuilder.setUserId(commonBundleManager.getUserId());
gridlayoutItemDbBuilder.setDownloadProgress(item.downloadProgress);
gridlayoutItemDbBuilder.setAppStatus(item.appStatus ?? 0);
gridlayoutItemDbBuilder.setCallerName(item.callerName);
gridlayoutItemDbBuilder.setAppIndex(item.appIndex ?? 0);
gridlayoutItemDbBuilder.setShortcutId(item.shortcutId ?? '');
gridlayoutItemDbBuilder.setIntent(item.intent ?? '');
gridlayoutItemDbBuilder.setSize(item.size ?? 0);
gridlayoutItemDbBuilder.setCtime(item.ctime ?? 0);
gridlayoutItemDbBuilder.setMtime(item.mtime ?? 0);
gridlayoutItemDbBuilder.setScreenId(item.screenId ?? 0);
}
private static setTypeRelativeInfo(item: GridLayoutItemInfo, gridlayoutItemDbBuilder: GridLayoutItemDbBuilder): void {
if (item.typeId === CommonConstants.TYPE_CARD) {
if (item.cardId) {
gridlayoutItemDbBuilder.setInfoId(item.cardId);
}
gridlayoutItemDbBuilder.setInfoName(item.cardName);
gridlayoutItemDbBuilder.setUri(item.formConfigAbility);
gridlayoutItemDbBuilder.setExtend2(item?.isTransparent ? '1' : '0');
} else if (item.typeId === CommonConstants.TYPE_FOLDER || item.typeId === CommonConstants.TYPE_REGION_FOLDER) {
gridlayoutItemDbBuilder.setInfoName(item.folderName);
gridlayoutItemDbBuilder.setInfoId(item.folderId);
} else if (item.typeId === CommonConstants.TYPE_APP || item.typeId === CommonConstants.TYPE_SHORTCUT_ICON) {
gridlayoutItemDbBuilder.setInfoName(item.appName ?? '');
gridlayoutItemDbBuilder.setInfoId(item.infoId);
} else if (item.typeId === CommonConstants.TYPE_FILE_FOLDER) {
gridlayoutItemDbBuilder.setInfoName(item.fileFolderName);
gridlayoutItemDbBuilder.setInfoId(item.infoId);
} else if (item.typeId === CommonConstants.TYPE_FORM_STACK) {
gridlayoutItemDbBuilder.setInfoId(item.formStackId);
}
}
}