diff --git a/shell/platform/ohos/flutter_embedding/flutter/index.ets b/shell/platform/ohos/flutter_embedding/flutter/index.ets index 91a7282d728dcf4d0806e9730dd02427945798be..8e44d572561bacb5f4f11cf0da363584980be719 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/index.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/index.ets @@ -60,7 +60,7 @@ export { default as FlutterAbilityLaunchConfigs } from './src/main/ets/embedding export { default as FlutterEngineConfigurator } from './src/main/ets/embedding/ohos/FlutterEngineConfigurator'; export { default as FlutterEngineProvider } from './src/main/ets/embedding/ohos/FlutterEngineProvider'; export { default as FlutterEntry } from './src/main/ets/embedding/ohos/FlutterEntry'; -export { default as FlutterManager } from './src/main/ets/embedding/ohos/FlutterManager'; +export { default as FlutterManager, DragDropCallback as DragDropCallback } from './src/main/ets/embedding/ohos/FlutterManager'; export * from './src/main/ets/embedding/ohos/FlutterPage'; export { default as KeyboardManager } from './src/main/ets/embedding/ohos/KeyboardManager'; export { default as OhosTouchProcessor } from './src/main/ets/embedding/ohos/OhosTouchProcessor'; diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterManager.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterManager.ets index 0f449572ed1c01d8c1c15785774093f30ce1068c..b3e2f0598ce95f13ec55d14b9ba3a46e346727a0 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterManager.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterManager.ets @@ -18,6 +18,8 @@ import { FlutterView } from '../../view/FlutterView'; import UIAbility from '@ohos.app.ability.UIAbility'; import window from '@ohos.window'; import Log from '../../util/Log'; +import HashMap from '@ohos.util.HashMap'; +import List from '@ohos.util.List'; const TAG = "FlutterManager" @@ -37,6 +39,76 @@ export default class FlutterManager { private windowStageList = new Map(); private mFullScreenListener: FullScreenListener = new DefaultFullScreenListener(); + private dragEnterCbId: number = 1; + private dragMoveCbId: number = 1; + private dragLeaveCbId: number = 1; + private dropCbId: number = 1; + + private dragEnterCbs: HashMap = new HashMap(); + private dragMoveCbs: HashMap = new HashMap(); + private dragLeaveCbs: HashMap = new HashMap(); + private dropCbs: HashMap = new HashMap(); + + private getValuesFromMap(map: HashMap): List { + let list: List = new List(); + map.forEach((value, key) => { + list.add(value); + }); + return list; + } + + getDragEnterCbs(): List { + return this.getValuesFromMap(this.dragEnterCbs); + } + + getDragMoveCbs(): List { + return this.getValuesFromMap(this.dragMoveCbs); + } + + getDragLeaveCbs(): List { + return this.getValuesFromMap(this.dragLeaveCbs); + } + + getDropCbs(): List { + return this.getValuesFromMap(this.dropCbs); + } + + addDragEnterCb(callback: DragDropCallback): number { + this.dragEnterCbs.set(this.dragEnterCbId, callback); + return this.dragEnterCbId++; + } + + addDragMoveCb(callback: DragDropCallback): number { + this.dragMoveCbs.set(this.dragMoveCbId, callback); + return this.dragMoveCbId++; + } + + addDragLeaveCb(callback: DragDropCallback): number { + this.dragLeaveCbs.set(this.dragLeaveCbId, callback); + return this.dragLeaveCbId++; + } + + addDropCb(callback: DragDropCallback): number { + this.dropCbs.set(this.dropCbId, callback); + return this.dropCbId++; + } + + removeDragEnterCb(id: number) { + this.dragEnterCbs.remove(id); + } + + removeDragMoveCb(id: number) { + this.dragMoveCbs.remove(id); + } + + removeDragLeaveCb(id: number) { + this.dragLeaveCbs.remove(id); + } + + removeDropCb(id: number) { + this.dropCbs.remove(id); + } + pushUIAbility(uiAbility: UIAbility) { this.uiAbilityList.push(uiAbility); } @@ -118,6 +190,10 @@ export default class FlutterManager { } } +export interface DragDropCallback { + do(event: DragEvent, extraParams: string): void; +} + export interface FullScreenListener { useFullScreen(): boolean; setUseFullScreen(useFullScreen: boolean, context?: Context | null | undefined): void; diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterPage.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterPage.ets index 15af51a2dd5fc024975fd30f72561cfd1c8caa34..0162cf764ed8fd067120060e94e27fb7e35f3038 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterPage.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterPage.ets @@ -84,6 +84,30 @@ export struct FlutterPage { this.flutterView?.onKeyEvent(event); return false; }) + .onDragEnter((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDragEnterCbs().forEach(dragEnterCb => { + dragEnterCb.do(event, extraParams); + }); + Log.d(TAG, "onDragEnter"); + }) + .onDragMove((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDragMoveCbs().forEach(dragMoveCb => { + dragMoveCb.do(event, extraParams); + }); + Log.d(TAG, "onDragMove"); + }) + .onDragLeave((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDragLeaveCbs().forEach(dragLeaveCb => { + dragLeaveCb.do(event, extraParams); + }); + Log.d(TAG, "onDragLeave"); + }) + .onDrop((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDropCbs().forEach(dropCb => { + dropCb.do(event, extraParams); + }); + Log.d(TAG, "onDrop"); + }) } @Builder mouseWheelPage() { Stack() { @@ -138,6 +162,30 @@ export struct FlutterPage { this.flutterView?.onKeyEvent(event); return false; }) + .onDragEnter((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDragEnterCbs().forEach(dragEnterCb => { + dragEnterCb.do(event, extraParams); + }); + Log.d(TAG, "onDragEnter"); + }) + .onDragMove((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDragMoveCbs().forEach(dragMoveCb => { + dragMoveCb.do(event, extraParams); + }); + Log.d(TAG, "onDragMove"); + }) + .onDragLeave((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDragLeaveCbs().forEach(dragLeaveCb => { + dragLeaveCb.do(event, extraParams); + }); + Log.d(TAG, "onDragLeave"); + }) + .onDrop((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDropCbs().forEach(dropCb => { + dropCb.do(event, extraParams); + }); + Log.d(TAG, "onDrop"); + }) .gesture( PanGesture(this.panOption) .onActionStart((event: GestureEvent) => {