diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/systemchannels/PlatformChannel.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/systemchannels/PlatformChannel.ets index caf39c49165ef42fcd90c20e7c823f1a7eda01e9..445cd3ebd5f87b8728fd6f5931f92e61e464251e 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/systemchannels/PlatformChannel.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/systemchannels/PlatformChannel.ets @@ -13,6 +13,7 @@ * limitations under the License. */ +import hiTraceMeter from '@ohos.hiTraceMeter'; import JSONMethodCodec from '../../../plugin/common/JSONMethodCodec'; import MethodCall from '../../../plugin/common/MethodCall'; import MethodChannel, { MethodCallHandler, MethodResult } from '../../../plugin/common/MethodChannel'; @@ -175,6 +176,17 @@ export default class PlatformChannel { throw new Error("No such DeviceOrientation: " + encodedName); } + getScrollActivityFromValue(activity: string): ScrollActivity { + let activityTypes: string[] = [ + ScrollActivity.START, + ScrollActivity.END + ]; + if (activityTypes.includes(activity as ScrollActivity)) { + return activity as ScrollActivity; + } + throw new Error("No such ScrollActivity: " + activity); + } + } export enum HapticFeedbackType { @@ -282,6 +294,11 @@ export enum DeviceOrientation { LANDSCAPE_RIGHT = "DeviceOrientation.landscapeRight", } +export enum ScrollActivity { + START = "start", + END = "end", +} + class PlatformMethodCallback implements MethodCallHandler { private static TAG = "PlatformMethodCallback" platform: PlatformChannel; @@ -390,6 +407,9 @@ class PlatformMethodCallback implements MethodCallHandler { Log.e(PlatformMethodCallback.TAG, "systemPasteboard.hasData err: " + JSON.stringify(err)); }) break; + case "Scroll.Activity": + this.recordScrollActivity(args as string); + break; default: result.notImplemented(); break; @@ -476,4 +496,16 @@ class PlatformMethodCallback implements MethodCallHandler { systemNavigationBarContrastEnforced ); } + + private recordScrollActivity(scrollActivity: string) { + let activityType = this.platform.getScrollActivityFromValue(scrollActivity); + switch(activityType) { + case ScrollActivity.START: + hiTraceMeter.startTrace('flutter::APP_LIST_FING', 0); + break; + case ScrollActivity.END: + hiTraceMeter.finishTrace('flutter::APP_LIST_FING', 0); + break; + } + } }