From 9421aec467ea07b91841d08e8eb62a092bfbffe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rulong=20Chen=EF=BC=88=E9=99=88=E6=B1=9D=E9=BE=99=EF=BC=89?= Date: Tue, 6 Aug 2024 19:50:49 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E5=87=8F=E5=B0=91=E8=80=A6=E5=90=88=EF=BC=8C=E9=99=8D=E4=BD=8E?= =?UTF-8?q?=E5=90=8E=E7=BB=AD=E7=9A=84=E7=BB=B4=E6=8A=A4=E6=88=90=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 去掉FlutterManager中不必要的接口,减少耦合,降低业务的接入和维护成本; 2. 将Flutter引擎中持有UIAbility对象替换为更合理的UIAbilityContext,使其符合鸿蒙的开发习惯,便于后续演进; 3. 在部分场景下,使用更具体的UIAbilityContext类型替代Context,减少不必要类型转换; [Tips] 该PR会导致breaking change,但修改成本非常小 Signed-off-by: Rulong Chen(陈汝龙) --- .../FlutterEngineConnectionRegistry.ets | 27 +++++------ .../plugins/ability/AbilityControlSurface.ets | 7 +-- .../plugins/ability/AbilityPluginBinding.ets | 7 +-- .../ets/embedding/ohos/FlutterAbility.ets | 32 ++++++------- .../ohos/FlutterAbilityAndEntryDelegate.ets | 26 +++++------ .../main/ets/embedding/ohos/FlutterEntry.ets | 22 ++++----- .../ets/embedding/ohos/FlutterManager.ets | 45 +++---------------- .../src/main/ets/plugin/PlatformPlugin.ets | 17 +++---- .../flutter/src/main/ets/view/FlutterView.ets | 8 ++-- 9 files changed, 62 insertions(+), 129 deletions(-) diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/FlutterEngineConnectionRegistry.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/FlutterEngineConnectionRegistry.ets index bdcddb159e..e36a202bbb 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/FlutterEngineConnectionRegistry.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/FlutterEngineConnectionRegistry.ets @@ -12,12 +12,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +import { AbilityConstant, Want, common } from '@kit.AbilityKit'; import PluginRegistry from './plugins/PluginRegistry'; import { FlutterAssets, FlutterPlugin, FlutterPluginBinding } from './plugins/FlutterPlugin'; import FlutterEngine from './FlutterEngine'; import AbilityAware from './plugins/ability/AbilityAware'; -import UIAbility from '@ohos.app.ability.UIAbility'; import { AbilityPluginBinding, WindowFocusChangedListener, @@ -25,15 +24,11 @@ import { NewWantListener } from './plugins/ability/AbilityPluginBinding'; import HashSet from '@ohos.util.HashSet'; -import Want from '@ohos.app.ability.Want'; -import AbilityConstant from '@ohos.app.ability.AbilityConstant'; -import common from '@ohos.app.ability.common'; import FlutterLoader from './loader/FlutterLoader'; import Log from '../../util/Log'; import ToolUtils from '../../util/ToolUtils'; import AbilityControlSurface from './plugins/ability/AbilityControlSurface'; import ExclusiveAppComponent from '../ohos/ExclusiveAppComponent'; -import FlutterEngineGroup from './FlutterEngineGroup'; import Any from '../../plugin/common/Any'; const TAG = "FlutterEngineCxnRegistry"; @@ -51,7 +46,7 @@ export default class FlutterEngineConnectionRegistry implements PluginRegistry, // AbilityAware private abilityAwarePlugins = new Map(); - private exclusiveAbility: ExclusiveAppComponent | null = null; + private exclusiveAbility: ExclusiveAppComponent | null = null; private abilityPluginBinding: FlutterEngineAbilityPluginBinding | null = null; constructor(appContext: common.Context, flutterEngine: FlutterEngine, flutterLoader: FlutterLoader) { @@ -137,14 +132,14 @@ export default class FlutterEngineConnectionRegistry implements PluginRegistry, return this.exclusiveAbility != null; } - attachToAbility(exclusiveAbility: ExclusiveAppComponent): void { + attachToAbility(exclusiveAbility: ExclusiveAppComponent): void { if (this.exclusiveAbility != null) { this.exclusiveAbility.detachFromFlutterEngine(); } // If we were already attached to an app component, detach from it. this.detachFromAppComponent(); this.exclusiveAbility = exclusiveAbility; - this.attachToAbilityInternal(exclusiveAbility.getAppComponent(),); + this.attachToAbilityInternal(exclusiveAbility.getAppComponent()); } detachFromAbility(): void { @@ -178,8 +173,8 @@ export default class FlutterEngineConnectionRegistry implements PluginRegistry, } } - private attachToAbilityInternal(ability: UIAbility): void { - this.abilityPluginBinding = new FlutterEngineAbilityPluginBinding(ability); + private attachToAbilityInternal(context: common.UIAbilityContext): void { + this.abilityPluginBinding = new FlutterEngineAbilityPluginBinding(context); // Notify all AbilityAware plugins that they are now attached to a new Ability. this.abilityAwarePlugins.forEach(abilityAware => abilityAware.onAttachedToAbility(this.abilityPluginBinding!)); } @@ -197,18 +192,18 @@ export default class FlutterEngineConnectionRegistry implements PluginRegistry, } class FlutterEngineAbilityPluginBinding implements AbilityPluginBinding { - private ability: UIAbility; + private context: common.UIAbilityContext; private onNewWantListeners = new HashSet(); private onWindowFocusChangedListeners = new HashSet(); private onSaveStateListeners = new HashSet(); - constructor(ability: UIAbility) { - this.ability = ability; + constructor(context: common.UIAbilityContext) { + this.context = context; } - getAbility(): UIAbility { - return this.ability; + getAbilityContext(): common.UIAbilityContext { + return this.context; } addOnNewWantListener(listener: NewWantListener): void { diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/plugins/ability/AbilityControlSurface.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/plugins/ability/AbilityControlSurface.ets index 947ccef4ba..1bc2d6fd13 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/plugins/ability/AbilityControlSurface.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/plugins/ability/AbilityControlSurface.ets @@ -12,14 +12,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import AbilityConstant from '@ohos.app.ability.AbilityConstant'; -import Want from '@ohos.app.ability.Want'; -import UIAbility from '@ohos.app.ability.UIAbility'; +import { AbilityConstant, Want, common } from '@kit.AbilityKit'; import ExclusiveAppComponent from '../../../ohos/ExclusiveAppComponent'; export default interface ActivityControlSurface { - attachToAbility(exclusiveActivity: ExclusiveAppComponent): void; + attachToAbility(exclusiveActivity: ExclusiveAppComponent): void; detachFromAbility(): void; onNewWant(want: Want, launchParams: AbilityConstant.LaunchParam): void; onWindowFocusChanged(hasFocus: boolean): void; diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/plugins/ability/AbilityPluginBinding.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/plugins/ability/AbilityPluginBinding.ets index 349010b14e..d7ddebf3c9 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/plugins/ability/AbilityPluginBinding.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/plugins/ability/AbilityPluginBinding.ets @@ -12,13 +12,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import UIAbility from '@ohos.app.ability.UIAbility' -import Want from '@ohos.app.ability.Want'; -import AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import { AbilityConstant, Want, common } from '@kit.AbilityKit'; export interface AbilityPluginBinding { - getAbility(): UIAbility; + getAbilityContext(): common.UIAbilityContext; /** * Adds a listener that is invoked whenever the associated {@link ohos.app.ability.UIAbility}'s {@code * onNewWant(...)} method is invoked. diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbility.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbility.ets index 8ba4463178..0443792321 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbility.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbility.ets @@ -12,8 +12,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import UIAbility from '@ohos.app.ability.UIAbility'; +import { + AbilityConstant, + Configuration, + ConfigurationConstant, + UIAbility, + Want, + appRecovery, + common, + errorManager +} from '@kit.AbilityKit'; import window from '@ohos.window'; import { FlutterAbilityAndEntryDelegate, Host } from './FlutterAbilityAndEntryDelegate'; import Log from '../../util/Log'; @@ -21,18 +29,10 @@ import FlutterEngine from '../engine/FlutterEngine'; import PlatformPlugin from '../../plugin/PlatformPlugin'; import FlutterShellArgs from '../engine/FlutterShellArgs'; import FlutterAbilityLaunchConfigs from './FlutterAbilityLaunchConfigs'; -import common from '@ohos.app.ability.common'; -import Want from '@ohos.app.ability.Want'; import { FlutterPlugin } from '../engine/plugins/FlutterPlugin'; -import AbilityConstant from '@ohos.app.ability.AbilityConstant'; import I18n from '@ohos.i18n' import { PlatformBrightness } from '../engine/systemchannels/SettingsChannel'; -import ConfigurationConstant from '@ohos.app.ability.ConfigurationConstant'; -import { Configuration } from '@ohos.app.ability.Configuration'; - import ExclusiveAppComponent from './ExclusiveAppComponent'; -import errorManager from '@ohos.app.ability.errorManager'; -import appRecovery from '@ohos.app.ability.appRecovery'; import FlutterManager from './FlutterManager'; import { FlutterView } from '../../view/FlutterView'; import ApplicationInfoLoader from '../engine/loader/ApplicationInfoLoader'; @@ -72,12 +72,9 @@ export class FlutterAbility extends UIAbility implements Host { AppStorage.setOrCreate('fontSizeScale', this.context.config.fontSizeScale); Log.i(TAG, "bundleCodeDir=" + this.context.bundleCodeDir); - FlutterManager.getInstance().pushUIAbility(this) - this.delegate = new FlutterAbilityAndEntryDelegate(this); await this?.delegate?.onAttach(this.context); Log.i(TAG, 'onAttach end'); - this?.delegate?.platformPlugin?.setUIAbilityContext(this.context); this?.delegate?.onRestoreInstanceState(want); if (this.stillAttachedForEvent("onCreate")) { @@ -111,7 +108,6 @@ export class FlutterAbility extends UIAbility implements Host { } onDestroy() { - FlutterManager.getInstance().popUIAbility(this); this.context.eventHub.off(EVENT_BACK_PRESS); errorManager.off('error', this.errorManagerId); @@ -136,7 +132,6 @@ export class FlutterAbility extends UIAbility implements Host { * @param windowStage */ onWindowStageCreate(windowStage: window.WindowStage) { - FlutterManager.getInstance().pushWindowStage(this, windowStage); this.delegate?.initWindow(); this.mainWindow = windowStage.getMainWindowSync(); try { @@ -188,7 +183,6 @@ export class FlutterAbility extends UIAbility implements Host { } onWindowStageDestroy() { - FlutterManager.getInstance().popWindowStage(this); if (this.stillAttachedForEvent("onWindowStageDestroy")) { this?.delegate?.onWindowStageDestroy(); } @@ -217,8 +211,8 @@ export class FlutterAbility extends UIAbility implements Host { * host所有实现方法开始======start */ - getAbility(): UIAbility { - return this; + getAbilityContext(): common.UIAbilityContext { + return this.context; } getFlutterAbilityAndEntryDelegate(): FlutterAbilityAndEntryDelegate | null{ @@ -319,7 +313,7 @@ export class FlutterAbility extends UIAbility implements Host { return true; } - getExclusiveAppComponent(): ExclusiveAppComponent | null { + getExclusiveAppComponent(): ExclusiveAppComponent | null { return this.delegate ? this.delegate : null } diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbilityAndEntryDelegate.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbilityAndEntryDelegate.ets index 480371d807..8b03d20105 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbilityAndEntryDelegate.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbilityAndEntryDelegate.ets @@ -12,21 +12,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import common from '@ohos.app.ability.common'; +import { AbilityConstant, Want, common } from '@kit.AbilityKit'; import FlutterEngineConfigurator from './FlutterEngineConfigurator'; import FlutterEngineProvider from './FlutterEngineProvider'; import FlutterEngine from '../engine/FlutterEngine'; import PlatformPlugin, { PlatformPluginDelegate } from '../../plugin/PlatformPlugin'; -import Want from '@ohos.app.ability.Want'; import FlutterShellArgs from '../engine/FlutterShellArgs'; -import DartExecutor, { DartEntrypoint } from '../engine/dart/DartExecutor'; +import { DartEntrypoint } from '../engine/dart/DartExecutor'; import FlutterAbilityLaunchConfigs from './FlutterAbilityLaunchConfigs'; import Log from '../../util/Log'; import FlutterInjector from '../../FlutterInjector'; -import UIAbility from '@ohos.app.ability.UIAbility'; import ExclusiveAppComponent from './ExclusiveAppComponent'; -import AbilityConstant from '@ohos.app.ability.AbilityConstant'; import TextInputPlugin from '../../plugin/editing/TextInputPlugin'; import { FlutterPlugin } from '../engine/plugins/FlutterPlugin'; import FlutterEngineCache from '../engine/FlutterEngineCache'; @@ -46,7 +42,7 @@ const FRAMEWORK_RESTORATION_BUNDLE_KEY = "framework"; * 1、初始化engine * 2、处理ability生命周期回调 */ -class FlutterAbilityAndEntryDelegate implements ExclusiveAppComponent { +class FlutterAbilityAndEntryDelegate implements ExclusiveAppComponent { protected host?: Host | null; flutterEngine?: FlutterEngine | null; platformPlugin?: PlatformPlugin; @@ -257,7 +253,7 @@ class FlutterAbilityAndEntryDelegate implements ExclusiveAppComponent .setDartEntrypointArgs(this.host?.getDartEntrypointArgs() ?? []); } - createView(context: Context): FlutterView { + createView(context: common.UIAbilityContext): FlutterView { this.flutterView = FlutterManager.getInstance().createFlutterView(context) if (this.flutterEngine && this.host?.attachToEngineAutomatically()) { this.flutterView.attachToFlutterEngine(this.flutterEngine!!); @@ -403,14 +399,14 @@ class FlutterAbilityAndEntryDelegate implements ExclusiveAppComponent this.host?.detachFromFlutterEngine(); } - getAppComponent(): UIAbility { - const ability = this.host?.getAbility(); - if (ability == null) { + getAppComponent(): common.UIAbilityContext { + const context = this.host?.getAbilityContext(); + if (context == null) { throw new Error( "FlutterAbilityAndFragmentDelegate's getAppComponent should only " - + "be queried after onAttach, when the host's ability should always be non-null"); + + "be queried after onAttach, when the host's ability context should always be non-null"); } - return ability; + return context; } onNewWant(want: Want, launchParams: AbilityConstant.LaunchParam): void { @@ -467,7 +463,7 @@ class FlutterAbilityAndEntryDelegate implements ExclusiveAppComponent */ interface Host extends FlutterEngineProvider, FlutterEngineConfigurator, PlatformPluginDelegate { - getAbility(): UIAbility; + getAbilityContext(): common.UIAbilityContext; shouldDispatchAppLifecycleState(): boolean; @@ -515,7 +511,7 @@ interface Host extends FlutterEngineProvider, FlutterEngineConfigurator, Platfor shouldRestoreAndSaveState(): boolean; /* Return the ExclusiveAppComponent */ - getExclusiveAppComponent(): ExclusiveAppComponent | null + getExclusiveAppComponent(): ExclusiveAppComponent | null providePlatformPlugin(flutterEngine: FlutterEngine): PlatformPlugin | undefined diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterEntry.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterEntry.ets index f6462e5cf3..396211877e 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterEntry.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterEntry.ets @@ -12,19 +12,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { Want, common } from '@kit.AbilityKit'; +import { window } from '@kit.ArkUI'; import FlutterEngine from '../engine/FlutterEngine'; import PlatformPlugin from '../../plugin/PlatformPlugin'; -import Want from '@ohos.app.ability.Want'; import FlutterShellArgs from '../engine/FlutterShellArgs'; -import UIAbility from '@ohos.app.ability.UIAbility'; import ExclusiveAppComponent from './ExclusiveAppComponent'; import { FlutterAbilityAndEntryDelegate, Host } from './FlutterAbilityAndEntryDelegate'; import FlutterAbilityLaunchConfigs from './FlutterAbilityLaunchConfigs'; import Log from '../../util/Log'; import { FlutterView } from '../../view/FlutterView'; -import FlutterManager from './FlutterManager'; -import window from '@ohos.window'; import FlutterEngineConfigurator from './FlutterEngineConfigurator'; import { FlutterPlugin } from '../engine/plugins/FlutterPlugin'; @@ -33,20 +31,18 @@ const TAG = "FlutterEntry"; export default class FlutterEntry implements Host { private static ARG_SHOULD_ATTACH_ENGINE_TO_ABILITY: string = "should_attach_engine_to_ability"; - protected uiAbility: UIAbility | null = null protected delegate: FlutterAbilityAndEntryDelegate | null = null protected flutterView: FlutterView | null = null - protected context: Context; + protected context: common.UIAbilityContext; protected windowStage: window.WindowStage | null = null private parameters: Record = {}; protected engineConfigurator: FlutterEngineConfigurator | null = null protected hasInit: boolean = false; - constructor(context: Context, params: Record = {}) { + constructor(context: common.UIAbilityContext, params: Record = {}) { this.context = context; - this.uiAbility = FlutterManager.getInstance().getUIAbility(context); this.parameters = params; - this.windowStage = FlutterManager.getInstance().getWindowStage(this.uiAbility); + this.windowStage = this.context.windowStage; this.hasInit = false; } @@ -58,7 +54,6 @@ export default class FlutterEntry implements Host { this.flutterView?.onWindowCreated(); await this?.delegate?.onAttach(this.context); Log.i(TAG, 'onAttach end'); - this?.delegate?.platformPlugin?.setUIAbilityContext(this.uiAbility!!.context); this.delegate?.onCreate(); this.delegate?.onWindowStageCreate() this.windowStage?.on('windowStageEvent', this.windowStageEventCallback); @@ -140,12 +135,11 @@ export default class FlutterEntry implements Host { } } - getAbility(): UIAbility { - return this.uiAbility!! + getAbilityContext(): common.UIAbilityContext { + return this.context; } loadContent() { - } shouldAttachEngineToAbility(): boolean { @@ -220,7 +214,7 @@ export default class FlutterEntry implements Host { return true; } - getExclusiveAppComponent(): ExclusiveAppComponent | null { + getExclusiveAppComponent(): ExclusiveAppComponent | null { return this.delegate ? this.delegate : null } 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 8cac73b0dc..0f6ee7093b 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 @@ -12,11 +12,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - - +import { common } from '@kit.AbilityKit'; +import { window } from '@kit.ArkUI'; import { FlutterView } from '../../view/FlutterView'; -import UIAbility from '@ohos.app.ability.UIAbility'; -import window from '@ohos.window'; import Log from '../../util/Log'; const TAG = "FlutterManager" @@ -33,40 +31,8 @@ export default class FlutterManager { private flutterViewList = new Map(); private flutterViewIndex = 1; - private uiAbilityList = new Array(); - private windowStageList = new Map(); private mFullScreenListener: FullScreenListener = new DefaultFullScreenListener(); - pushUIAbility(uiAbility: UIAbility) { - this.uiAbilityList.push(uiAbility); - } - - popUIAbility(uiAbility: UIAbility) { - let index = this.uiAbilityList.findIndex((item: UIAbility) => item == uiAbility) - if (index > 0) { - this.uiAbilityList.splice(index, 1) - } - } - - pushWindowStage(uiAbility: UIAbility, windowStage: window.WindowStage) { - this.windowStageList.set(uiAbility, windowStage) - } - - popWindowStage(uiAbility: UIAbility) { - this.windowStageList.delete(uiAbility) - } - - getWindowStage(uiAbility: UIAbility): window.WindowStage { - return this.windowStageList.get(uiAbility)!! - } - - getUIAbility(context?: Context): UIAbility { - if (!context && this.uiAbilityList.length > 0) { - return this.uiAbilityList[0]; - } - return this.uiAbilityList.find((item: UIAbility) => item.context == context)!! - } - hasFlutterView(viewId: string): boolean { return this.flutterViewList.has(viewId); } @@ -91,7 +57,7 @@ export default class FlutterManager { * It's suggested to keep 'oh_flutter_' as the prefix for xcomponent_id. * Otherwise it might affect the performance. */ - createFlutterView(context: Context): FlutterView { + createFlutterView(context: common.UIAbilityContext): FlutterView { let flutterView = new FlutterView(`oh_flutter_${this.flutterViewIndex++}`, context); this.putFlutterView(flutterView.getId(), flutterView); return flutterView; @@ -136,9 +102,8 @@ export class DefaultFullScreenListener implements FullScreenListener { this.fullScreen = useFullScreen; this.skipCheck = true; - let window = FlutterManager.getInstance() - .getWindowStage(FlutterManager.getInstance().getUIAbility(getContext(this))); - window.getMainWindowSync().setWindowLayoutFullScreen(useFullScreen); + const windowStage = (getContext(this) as common.UIAbilityContext).windowStage; + windowStage.getMainWindowSync().setWindowLayoutFullScreen(useFullScreen); Log.i(TAG, "WindowLayoutFullScreen is on") } diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/PlatformPlugin.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/PlatformPlugin.ets index e9ef8faa7d..8cfc595ca1 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/PlatformPlugin.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/PlatformPlugin.ets @@ -42,7 +42,7 @@ export default class PlatformPlugin { private static TAG = "PlatformPlugin"; callback = new PlatformPluginCallback(); - constructor(platformChannel: PlatformChannel, context: common.Context, platformPluginDelegate?: PlatformPluginDelegate) { + constructor(platformChannel: PlatformChannel, context: common.UIAbilityContext, platformPluginDelegate?: PlatformPluginDelegate) { this.callback.platformChannel = platformChannel; this.callback.context = context; this.callback.applicationContext = context?.getApplicationContext(); @@ -61,8 +61,8 @@ export default class PlatformPlugin { } this.callback.lastWindow = data; }); - const uiAbility = FlutterManager.getInstance().getUIAbility(context); - const windowStage = FlutterManager.getInstance().getWindowStage(uiAbility); + + const windowStage = context.windowStage; this.callback.mainWindow = windowStage.getMainWindowSync(); } catch (err) { Log.e(PlatformPlugin.TAG, "Failed to obtain the top window. Cause: " + JSON.stringify(err)); @@ -77,10 +77,6 @@ export default class PlatformPlugin { } } - setUIAbilityContext(context: common.UIAbilityContext): void { - this.callback.uiAbilityContext = context; - } - setSystemChromeChangeListener(): void { if (this.callback.callbackId == null && this.callback.applicationContext != null) { let that = this; @@ -111,9 +107,8 @@ export class PlatformPluginCallback implements PlatformMessageHandler { lastWindow: window.Window | null = null; platformChannel: PlatformChannel | null = null; platformPluginDelegate: PlatformPluginDelegate | null = null; - context: common.Context | null = null; + context: common.UIAbilityContext | null = null; showBarOrNavigation: ('status' | 'navigation')[] = ['status', 'navigation']; - uiAbilityContext: common.UIAbilityContext | null = null; callbackId: number | null = null; applicationContext: common.ApplicationContext | null = null; currentTheme: SystemChromeStyle | null = null; @@ -168,7 +163,7 @@ export class PlatformPluginCallback implements PlatformMessageHandler { Log.d(PlatformPluginCallback.TAG, "setApplicationSwitcherDescription: " + JSON.stringify(description)); try { let label: string = description?.label; - this.uiAbilityContext?.setMissionLabel(label).then(() => { + this.context?.setMissionLabel(label).then(() => { Log.d(PlatformPluginCallback.TAG, "Succeeded in seting mission label"); }) } catch (err) { @@ -206,7 +201,7 @@ export class PlatformPluginCallback implements PlatformMessageHandler { getClipboardData(result: MethodResult): void { let atManager = abilityAccessCtrl.createAtManager(); - atManager.requestPermissionsFromUser(this.uiAbilityContext, ['ohos.permission.READ_PASTEBOARD']).then((data) => { + atManager.requestPermissionsFromUser(this.context, ['ohos.permission.READ_PASTEBOARD']).then((data) => { // https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-permissionrequestresult-V5 // 相应请求权限的结果: // -1:未授权,表示权限已设置,无需弹窗,需要用户在"设置"中修改 diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/view/FlutterView.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/view/FlutterView.ets index 03bdbc5b08..5361caa6dc 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/view/FlutterView.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/view/FlutterView.ets @@ -12,6 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { common } from '@kit.AbilityKit'; import FlutterEngine from '../embedding/engine/FlutterEngine'; import Log from '../util/Log'; import { DVModel, DVModelChildren, DVModelEvents, DVModelParameters } from './DynamicView/dynamicView'; @@ -92,17 +93,16 @@ export class FlutterView { private checkKeyboard: boolean = true; private checkGesture: boolean = true; - constructor(viewId: string, context: Context) { + constructor(viewId: string, context: common.UIAbilityContext) { this.id = viewId this.displayInfo = display.getDefaultDisplaySync(); + this.viewportMetrics.devicePixelRatio = this.displayInfo?.densityPixels; this.viewportMetrics.physicalTouchSlop = 1.0 * this.displayInfo?.densityPixels; - this.mainWindow = FlutterManager.getInstance() - .getWindowStage(FlutterManager.getInstance().getUIAbility(context)) - .getMainWindowSync(); this.mFirstFrameListeners = new ArrayList(); + this.mainWindow = context.windowStage.getMainWindowSync(); this.mainWindow?.on('windowSizeChange', this.windowSizeChangeCallback); this.mainWindow?.on('avoidAreaChange', this.avoidAreaChangeCallback); this.mainWindow?.on('windowStatusChange', this.windowStatusChangeCallback); -- Gitee