diff --git a/common/src/main/ets/default/constants/CommonConstants.ts b/common/src/main/ets/default/constants/CommonConstants.ts index eb86c7761f60b63dec0baa9bc09bbcd16047778a..4c3766870911acc9e3276de1e2b2dab7ade59175 100644 --- a/common/src/main/ets/default/constants/CommonConstants.ts +++ b/common/src/main/ets/default/constants/CommonConstants.ts @@ -298,6 +298,12 @@ export class CommonConstants { */ static NAVIGATION_BAR_STATUS_KEY: string = 'settings.display.navigationbar_status'; + + /** + * launcher is load status settingDataKey. + */ + static LAUNCHER_LOAD_STATUS_KEY: string = 'settings.display.launcher_load_status'; + /** * setting data ability uri */ diff --git a/common/src/main/ets/default/manager/SettingsDataManager.ts b/common/src/main/ets/default/manager/SettingsDataManager.ts index 85f156d6dd328824b475a91493030f8652c0f4b3..f5904d2ec4569c7d362027a0f079d8cbc297455b 100644 --- a/common/src/main/ets/default/manager/SettingsDataManager.ts +++ b/common/src/main/ets/default/manager/SettingsDataManager.ts @@ -20,6 +20,7 @@ import dataShare from '@ohos.data.dataShare'; import common from '@ohos.app.ability.common'; import { Context } from '@ohos.abilityAccessCtrl'; import { BusinessError } from '@ohos.base'; +import { CommonConstants } from '../constants/CommonConstants'; const TAG = 'SettingsDataManager' /** @@ -27,6 +28,7 @@ const TAG = 'SettingsDataManager' */ class SettingsDataManager { private readonly uriShare: string = 'datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true&key='; + private readonly isLoad: String = 'isLoad'; private dataShareHelper: dataShare.DataShareHelper | null = null; private constructor() { } @@ -60,6 +62,23 @@ class SettingsDataManager { }, UPDATE_INTERVAL); } + public createLauncherDataShareHelper() { + Log.showInfo(TAG, 'createLauncherDataShareHelper'); + let url = this.uriShare + CommonConstants.LAUNCHER_LOAD_STATUS_KEY; + const UPDATE_INTERVAL = 50; + const timer = setInterval(() => { + dataShare.createDataShareHelper(globalThis.desktopContext, url) + .then((dataHelper) => { + Log.showInfo(TAG, `createLauncherDataShareHelper success.`); + this.setLoadValue(dataHelper, CommonConstants.LAUNCHER_LOAD_STATUS_KEY, this.isLoad); + clearInterval(timer); + }) + .catch((err: BusinessError) => { + Log.showError(TAG, `createLauncherDataShareHelper fail. ${JSON.stringify(err)}`); + }); + }, UPDATE_INTERVAL); + } + /** * Update settingData by settingDataKey. */ @@ -72,6 +91,18 @@ class SettingsDataManager { } } + /** + * Update launcher load settingData by settingDataKey. + */ + setLoadValue(helper: dataShare.DataShareHelper | null, settingDataKey: string, value: string): void { + Log.showInfo(TAG, "setLoadValue:" + value ) + if (typeof globalThis.desktopContext === 'undefined') { + settings.setValueSync(globalThis.settingsContext as Context, settingDataKey, value); + } else { + settings.setValueSync(globalThis.desktopContext as Context, settingDataKey, value); + } + } + /** * get settingDataValue by settingDataKey. * @@ -102,7 +133,7 @@ class SettingsDataManager { * * @return settingDataHelper by settingDataUri. */ - getHelper(context: common.Context, uri: string): dataShare.DataShareHelper | null { + getHelper(context: common.Context, uri: string | null): dataShare.DataShareHelper | null { return this.dataShareHelper; } } diff --git a/feature/smartdock/src/main/ets/default/layout/SmartDock.ets b/feature/smartdock/src/main/ets/default/layout/SmartDock.ets index c17debfe61d74fd4d76fb4c2a12df3294e3fc8ce..e7d8a1fdc19c57d31bf0a2d4ffdbcec67e0589e8 100644 --- a/feature/smartdock/src/main/ets/default/layout/SmartDock.ets +++ b/feature/smartdock/src/main/ets/default/layout/SmartDock.ets @@ -20,13 +20,19 @@ import { Log, CommonConstants, ResourceManager, - RecentBundleMissionInfo, DockItemInfo, - MenuInfo } from '@ohos/common'; + RecentBundleMissionInfo, + DockItemInfo, + settingsDataManager, + MenuInfo +} from '@ohos/common'; import RecentLayout from './RecentLayout'; import ResidentLayout from './ResidentLayout'; import SmartDockViewModel from '../viewmodel/SmartDockViewModel'; import SmartDockConstants from '../common/constants/SmartDockConstants'; import { SmartDockStyleConfig } from '../config/SmartDockStyleConfig'; +import MainAbility from '../../../../../../../product/phone/src/main/ets/MainAbility/MainAbility' +import dataShare from '@ohos.data.dataShare'; +import settings from '@ohos.settings'; const TAG = 'SmartDock'; @@ -51,7 +57,7 @@ export struct SmartDock { private dialogName = ''; @State mSmartDockStyleConfig: SmartDockStyleConfig | undefined = undefined; - aboutToAppear(): void { + aboutToAppear(): void { Log.showInfo(TAG, 'aboutToAppear start!'); this.deviceType = AppStorage.get('deviceType') as string; try { @@ -66,7 +72,7 @@ export struct SmartDock { }); } - aboutToDisappear(): void { + aboutToDisappear(): void { Log.showInfo(TAG, 'aboutToDisappear!'); this.mDialogController = null; } @@ -105,7 +111,7 @@ export struct SmartDock { } showDialog = () => { - this.mSelectedItem = this.mSmartDockViewModel?.getSelectedItem() as DockItemInfo | null; + this.mSelectedItem = this.mSmartDockViewModel?.getSelectedItem() as DockItemInfo|null; this.mSelectedDockType = this.mSmartDockViewModel?.getSelectedDockType() as number; this.mDialogController?.open(); } @@ -187,6 +193,9 @@ export struct SmartDock { }) } } + .onAppear(()=>{ + MainAbility.prototype.sendToLockscreen(); + }) .enableScrollInteraction(false) .scrollBar(BarState.Off) .hitTestBehavior(this.desktopEventResponse ? HitTestMode.Default : HitTestMode.Block) diff --git a/product/phone/src/main/ets/MainAbility/MainAbility.ts b/product/phone/src/main/ets/MainAbility/MainAbility.ts index 87f0db6c0bd8e8ffe6589206ab3ef263a9259d80..2f2fe3297db3a1ad8db2fa8fa232cbf5cb1e4fe2 100644 --- a/product/phone/src/main/ets/MainAbility/MainAbility.ts +++ b/product/phone/src/main/ets/MainAbility/MainAbility.ts @@ -28,7 +28,8 @@ import { navigationBarCommonEventManager, localEventManager, EventConstants, - DisplayManager + DisplayManager, + settingsDataManager } from '@ohos/common'; import { GestureNavigationManager } from '@ohos/gesturenavigation'; import StyleConstants from '../common/constants/StyleConstants'; @@ -38,11 +39,14 @@ import inputConsumer from '@ohos.multimodalInput.inputConsumer'; import { KeyCode } from '@ohos.multimodalInput.keyCode'; import window from '@ohos.window'; import { PreferencesHelper } from '@ohos/common/src/main/ets/default/manager/PreferencesHelper'; +import dataShare from '@ohos.data.dataShare'; const TAG = 'LauncherMainAbility'; export default class MainAbility extends ServiceExtension { private displayManager: DisplayManager = undefined + private uri: string | null = null; + private helper: dataShare.DataShareHelper | null = null ; onCreate(want: Want): void { Log.showInfo(TAG,'onCreate start'); @@ -53,6 +57,20 @@ export default class MainAbility extends ServiceExtension { async initLauncher(): Promise { // init Launcher context globalThis.desktopContext = this.context; + let registerWinEvent = (win: window.Window) => { + win.on('windowEvent', (stageEventType) => { + // 桌面获焦或失焦时,通知桌面的卡片变为可见状态 + if (stageEventType === window.WindowEventType.WINDOW_ACTIVE) { + launcherAbilityManager.checkBundleMonitor(); + localEventManager.sendLocalEventSticky(EventConstants.EVENT_REQUEST_FORM_ITEM_VISIBLE, null); + Log.showInfo(TAG, `lifeCycleEvent change: ${stageEventType}`); + } + }) + }; + // create Launcher entry view + windowManager.createWindow(globalThis.desktopContext, windowManager.DESKTOP_WINDOW_NAME, + windowManager.DESKTOP_RANK, 'pages/' + windowManager.DESKTOP_WINDOW_NAME, true, registerWinEvent); + PreferencesHelper.getInstance().initPreference(this.context); // init global const this.initGlobalConst(); @@ -65,30 +83,28 @@ export default class MainAbility extends ServiceExtension { await dbStore.initRdbConfig(); await dbStore.createTable(); - let registerWinEvent = (win: window.Window) => { - win.on('windowEvent', (stageEventType) => { - // 桌面获焦或失焦时,通知桌面的卡片变为可见状态 - if (stageEventType === window.WindowEventType.WINDOW_ACTIVE) { - launcherAbilityManager.checkBundleMonitor(); - localEventManager.sendLocalEventSticky(EventConstants.EVENT_REQUEST_FORM_ITEM_VISIBLE, null); - Log.showInfo(TAG, `lifeCycleEvent change: ${stageEventType}`); - } - }) - }; - windowManager.registerWindowEvent(); navigationBarCommonEventManager.registerNavigationBarEvent(); - // create Launcher entry view - windowManager.createWindow(globalThis.desktopContext, windowManager.DESKTOP_WINDOW_NAME, - windowManager.DESKTOP_RANK, 'pages/' + windowManager.DESKTOP_WINDOW_NAME, true, registerWinEvent); - // load recent windowManager.createRecentWindow(); this.registerInputConsumer(); - this.displayManager = DisplayManager.getInstance() + AppStorage.setOrCreate('loaded', true); + this.displayManager = DisplayManager.getInstance(); } + public sendToLockscreen() { + this.uri = settingsDataManager.getUri(CommonConstants.LAUNCHER_LOAD_STATUS_KEY); + this.helper = settingsDataManager.getHelper(globalThis.desktopContext, this.uri); + if (this.helper) { + settingsDataManager.setLoadValue(this.helper, CommonConstants.LAUNCHER_LOAD_STATUS_KEY, 'isLoad'); + Log.showInfo(TAG, "helper:" + this.helper + "registerListenForLauncherIsLoadDataChanges uri:" + this.uri); + return; + } + settingsDataManager.createLauncherDataShareHelper(); + } + + private registerInputConsumer(): void { // register/unregister HOME inputConsumer inputConsumer.on('key', { diff --git a/product/phone/src/main/ets/pages/EntryView.ets b/product/phone/src/main/ets/pages/EntryView.ets index 87a224e4493e8ae5dc15468f44bdb2af0d3b851f..3797b9c1695aaec842c9338d163f0f7ef02a9e5d 100644 --- a/product/phone/src/main/ets/pages/EntryView.ets +++ b/product/phone/src/main/ets/pages/EntryView.ets @@ -30,7 +30,7 @@ import { SmartDockStyleConfig } from '@ohos/smartdock'; import PhonePageDesktopGridStyleConfig from '../common/PhonePageDesktopGridStyleConfig'; import { FormStyleConfig } from '@ohos/form'; -const TAG = 'EntryView'; +const TAG = "EntryView"; interface LocalEventListener { onReceiveEvent: (event: string, params: string) => void; @@ -42,6 +42,7 @@ struct EntryView { @StorageLink('screenWidth') screenWidth: number = 0; @StorageLink('screenHeight') @Watch('updateScreenInfo') screenHeight: number = 0; @StorageLink('deviceType') deviceType: string = CommonConstants.DEFAULT_DEVICE_TYPE; + @StorageLink('loaded') loaded: boolean = false; @State workSpaceWidth: number = 0; @State workSpaceHeight: number = 0; @State dockHeight: number = 0; @@ -130,30 +131,34 @@ struct EntryView { build() { Stack() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { - Column() { - PageDesktopLayout(); - } - .height(this.workSpaceHeight) - .onAreaChange((oldValue: Area, newValue: Area) => { - Log.showDebug(TAG, `onAreaChange navigationBarStatus: ${this.navigationBarStatus}`); - if (JSON.stringify(oldValue) == JSON.stringify(newValue)) { - return; + if (this.loaded) { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Column() { + PageDesktopLayout(); } - if (this.navigationBarStatus == '1') { - setTimeout(() => { - SettingsModel.getInstance().setValue(this.navigationBarStatus); - }, 50) + .height(this.workSpaceHeight) + .onAreaChange((oldValue: Area, newValue: Area) => { + Log.showError(TAG, `onAreaChange navigationBarStatus: ${this.navigationBarStatus}`); + try { + if (JSON.stringify(oldValue) == JSON.stringify(newValue)) return; + if (this.navigationBarStatus == "1") { + setTimeout(() => { + SettingsModel.getInstance().setValue(this.navigationBarStatus); + }, 50) + } + } catch (err) { + Log.showError(TAG ,`build > onAreaChange err:${err}`) + } + }) + + Column() { + SmartDock(); } - }) - - Column() { - SmartDock(); + .height(this.dockHeight) } - .height(this.dockHeight) - } - FolderOpenComponent(); + FolderOpenComponent(); + } } .backgroundImage(StyleConstants.DEFAULT_BACKGROUND_IMAGE) .backgroundImageSize(ImageSize.Cover)