16e80583aSopenharmony_ci/** 26e80583aSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 36e80583aSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 46e80583aSopenharmony_ci * you may not use this file except in compliance with the License. 56e80583aSopenharmony_ci * You may obtain a copy of the License at 66e80583aSopenharmony_ci * 76e80583aSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 86e80583aSopenharmony_ci * 96e80583aSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 106e80583aSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 116e80583aSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 126e80583aSopenharmony_ci * See the License for the specific language governing permissions and 136e80583aSopenharmony_ci * limitations under the License. 146e80583aSopenharmony_ci */ 156e80583aSopenharmony_ci 166e80583aSopenharmony_ciimport { Log } from '../utils/Log'; 176e80583aSopenharmony_ciimport { MenuInfo } from '../bean/MenuInfo'; 186e80583aSopenharmony_ciimport { StyleConstants } from '../constants/StyleConstants'; 196e80583aSopenharmony_ciimport { CommonConstants } from '../constants/CommonConstants'; 206e80583aSopenharmony_ciimport { ResourceManager } from '../manager/ResourceManager'; 216e80583aSopenharmony_ci 226e80583aSopenharmony_ciconst TAG = 'AppMenu'; 236e80583aSopenharmony_ci 246e80583aSopenharmony_ci@Component 256e80583aSopenharmony_ciexport struct AppMenu { 266e80583aSopenharmony_ci menuInfoList: Array<MenuInfo> = []; 276e80583aSopenharmony_ci getMenuInfoList?: Function; 286e80583aSopenharmony_ci menuMode: number = CommonConstants.MENU_UI_MODE_LIGHT; 296e80583aSopenharmony_ci fixedMenuList: Array<MenuInfo> = []; 306e80583aSopenharmony_ci dynamicMenuList: Array<MenuInfo> = []; 316e80583aSopenharmony_ci isBothTypeMenuExist: boolean = true; 326e80583aSopenharmony_ci closeMenu: Function = () => {}; 336e80583aSopenharmony_ci 346e80583aSopenharmony_ci aboutToAppear(): void { 356e80583aSopenharmony_ci Log.showInfo(TAG, 'aboutToAppear start'); 366e80583aSopenharmony_ci if (this.getMenuInfoList) { 376e80583aSopenharmony_ci this.menuInfoList = this.getMenuInfoList(); 386e80583aSopenharmony_ci } 396e80583aSopenharmony_ci this.fixedMenuList = []; 406e80583aSopenharmony_ci this.dynamicMenuList = []; 416e80583aSopenharmony_ci for (let menuInfo of this.menuInfoList) { 426e80583aSopenharmony_ci if (menuInfo.menuType == CommonConstants.MENU_TYPE_FIXED) { 436e80583aSopenharmony_ci this.fixedMenuList.push(menuInfo); 446e80583aSopenharmony_ci } else { 456e80583aSopenharmony_ci this.dynamicMenuList.push(menuInfo); 466e80583aSopenharmony_ci } 476e80583aSopenharmony_ci } 486e80583aSopenharmony_ci this.isBothTypeMenuExist = this.fixedMenuList.length > 0 && this.dynamicMenuList.length > 0; 496e80583aSopenharmony_ci } 506e80583aSopenharmony_ci 516e80583aSopenharmony_ci aboutToDisappear(): void { 526e80583aSopenharmony_ci Log.showInfo(TAG, 'aboutToDisappear start'); 536e80583aSopenharmony_ci this.fixedMenuList = []; 546e80583aSopenharmony_ci this.dynamicMenuList = []; 556e80583aSopenharmony_ci } 566e80583aSopenharmony_ci 576e80583aSopenharmony_ci build() { 586e80583aSopenharmony_ci Column() { 596e80583aSopenharmony_ci Column() { 606e80583aSopenharmony_ci ForEach(this.dynamicMenuList, (item: MenuInfo) => { 616e80583aSopenharmony_ci Column() { 626e80583aSopenharmony_ci HorizontalMenuItem({ 636e80583aSopenharmony_ci menuInfo: item, 646e80583aSopenharmony_ci menuMode: this.menuMode, 656e80583aSopenharmony_ci closeMenu: this.closeMenu 666e80583aSopenharmony_ci }) 676e80583aSopenharmony_ci } 686e80583aSopenharmony_ci }, (item: MenuInfo) => JSON.stringify(item)) 696e80583aSopenharmony_ci } 706e80583aSopenharmony_ci .visibility(this.dynamicMenuList.length > 0 ? Visibility.Visible : Visibility.None) 716e80583aSopenharmony_ci 726e80583aSopenharmony_ci if (this.isBothTypeMenuExist) { 736e80583aSopenharmony_ci Divider() 746e80583aSopenharmony_ci .vertical(false) 756e80583aSopenharmony_ci .color((this.menuMode == CommonConstants.MENU_UI_MODE_LIGHT) ? '#33000000' : '#33ffffff') 766e80583aSopenharmony_ci .strokeWidth(1) 776e80583aSopenharmony_ci } 786e80583aSopenharmony_ci 796e80583aSopenharmony_ci Column() { 806e80583aSopenharmony_ci ForEach(this.fixedMenuList, (item: MenuInfo) => { 816e80583aSopenharmony_ci Column() { 826e80583aSopenharmony_ci HorizontalMenuItem({ 836e80583aSopenharmony_ci menuInfo: item, 846e80583aSopenharmony_ci menuMode: this.menuMode, 856e80583aSopenharmony_ci closeMenu: this.closeMenu 866e80583aSopenharmony_ci }) 876e80583aSopenharmony_ci } 886e80583aSopenharmony_ci }, (item: MenuInfo) => JSON.stringify(item)) 896e80583aSopenharmony_ci } 906e80583aSopenharmony_ci .visibility(this.fixedMenuList.length > 0 ? Visibility.Visible : Visibility.None) 916e80583aSopenharmony_ci } 926e80583aSopenharmony_ci .padding({ 936e80583aSopenharmony_ci top: 4, 946e80583aSopenharmony_ci bottom: 4, 956e80583aSopenharmony_ci left: 4, 966e80583aSopenharmony_ci right: 4 976e80583aSopenharmony_ci }) 986e80583aSopenharmony_ci .borderRadius(StyleConstants.DEFAULT_12) 996e80583aSopenharmony_ci } 1006e80583aSopenharmony_ci} 1016e80583aSopenharmony_ci 1026e80583aSopenharmony_ci@Component 1036e80583aSopenharmony_cistruct HorizontalMenuItem { 1046e80583aSopenharmony_ci @State shortcutIcon: string = StyleConstants.DEFAULT_ICON; 1056e80583aSopenharmony_ci @State shortcutName: string = ''; 1066e80583aSopenharmony_ci private mResourceManager = ResourceManager.getInstance(); 1076e80583aSopenharmony_ci menuInfo: MenuInfo = new MenuInfo(); 1086e80583aSopenharmony_ci menuMode: number = CommonConstants.MENU_UI_MODE_LIGHT; 1096e80583aSopenharmony_ci closeMenu: Function = () => {}; 1106e80583aSopenharmony_ci 1116e80583aSopenharmony_ci aboutToAppear(): void { 1126e80583aSopenharmony_ci this.mResourceManager = ResourceManager.getInstance(); 1136e80583aSopenharmony_ci this.updateIcon(); 1146e80583aSopenharmony_ci this.updateName(); 1156e80583aSopenharmony_ci } 1166e80583aSopenharmony_ci 1176e80583aSopenharmony_ci aboutToDisappear(): void { 1186e80583aSopenharmony_ci } 1196e80583aSopenharmony_ci 1206e80583aSopenharmony_ci public shortcutIconLoadCallback = (image: string) => { 1216e80583aSopenharmony_ci this.shortcutIcon = image; 1226e80583aSopenharmony_ci } 1236e80583aSopenharmony_ci 1246e80583aSopenharmony_ci public shortcutNameLoadCallback = (name: string) => { 1256e80583aSopenharmony_ci this.shortcutName = name; 1266e80583aSopenharmony_ci } 1276e80583aSopenharmony_ci 1286e80583aSopenharmony_ci public updateIcon() { 1296e80583aSopenharmony_ci if (this.menuInfo.shortcutIconId != -1 && this.menuInfo.menuImgSrc != '' && this.menuInfo.menuImgSrc != null) { 1306e80583aSopenharmony_ci this.mResourceManager.getAppIconWithCache(this.menuInfo.shortcutIconId, this.menuInfo.bundleName, 1316e80583aSopenharmony_ci this.menuInfo.moduleName, this.shortcutIconLoadCallback, StyleConstants.DEFAULT_ICON); 1326e80583aSopenharmony_ci } else { 1336e80583aSopenharmony_ci this.shortcutIconLoadCallback(this.menuInfo.menuImgSrc); 1346e80583aSopenharmony_ci } 1356e80583aSopenharmony_ci } 1366e80583aSopenharmony_ci 1376e80583aSopenharmony_ci public updateName() { 1386e80583aSopenharmony_ci if (this.menuInfo.shortcutLabelId != -1 && this.menuInfo.menuText != '' && this.menuInfo.menuText != null && this.mResourceManager) { 1396e80583aSopenharmony_ci this.mResourceManager.getAppNameWithCache(this.menuInfo.shortcutLabelId, this.menuInfo.bundleName, 1406e80583aSopenharmony_ci this.menuInfo.moduleName, this.shortcutName, this.shortcutNameLoadCallback); 1416e80583aSopenharmony_ci } else { 1426e80583aSopenharmony_ci this.shortcutNameLoadCallback(this.menuInfo.menuText); 1436e80583aSopenharmony_ci } 1446e80583aSopenharmony_ci } 1456e80583aSopenharmony_ci 1466e80583aSopenharmony_ci build() { 1476e80583aSopenharmony_ci Row() { 1486e80583aSopenharmony_ci if (this.shortcutIcon != null && this.shortcutIcon != '') { 1496e80583aSopenharmony_ci Image(this.shortcutIcon) 1506e80583aSopenharmony_ci .objectFit(ImageFit.Contain) 1516e80583aSopenharmony_ci .height(StyleConstants.DEFAULT_20) 1526e80583aSopenharmony_ci .width(StyleConstants.DEFAULT_20) 1536e80583aSopenharmony_ci .margin({ 1546e80583aSopenharmony_ci left: 12 1556e80583aSopenharmony_ci }) 1566e80583aSopenharmony_ci } else { 1576e80583aSopenharmony_ci Image('') 1586e80583aSopenharmony_ci .objectFit(ImageFit.Contain) 1596e80583aSopenharmony_ci .height(StyleConstants.DEFAULT_20) 1606e80583aSopenharmony_ci .width(StyleConstants.DEFAULT_20) 1616e80583aSopenharmony_ci .backgroundColor('#33ffffFF') 1626e80583aSopenharmony_ci .margin({ 1636e80583aSopenharmony_ci left: 12 1646e80583aSopenharmony_ci }) 1656e80583aSopenharmony_ci } 1666e80583aSopenharmony_ci Text(this.shortcutName) 1676e80583aSopenharmony_ci .fontColor((this.menuMode == CommonConstants.MENU_UI_MODE_LIGHT) ? '#e5000000' : '#e5ffffff') 1686e80583aSopenharmony_ci .fontSize(14) 1696e80583aSopenharmony_ci .height(StyleConstants.DEFAULT_20) 1706e80583aSopenharmony_ci .margin({ 1716e80583aSopenharmony_ci left: StyleConstants.DEFAULT_8 1726e80583aSopenharmony_ci }) 1736e80583aSopenharmony_ci .textOverflow({overflow: TextOverflow.Ellipsis}) 1746e80583aSopenharmony_ci } 1756e80583aSopenharmony_ci .alignItems(VerticalAlign.Center) 1766e80583aSopenharmony_ci .borderRadius(StyleConstants.DEFAULT_ITEM_RADIUS) 1776e80583aSopenharmony_ci .height(StyleConstants.DEFAULT_40) 1786e80583aSopenharmony_ci .width(235) 1796e80583aSopenharmony_ci .onClick(() => { 1806e80583aSopenharmony_ci this.menuInfo?.onMenuClick(); 1816e80583aSopenharmony_ci this.closeMenu(); 1826e80583aSopenharmony_ci }) 1836e80583aSopenharmony_ci } 1846e80583aSopenharmony_ci}