From 346aeea05775cdf723dff00958cdfa9aa41269e8 Mon Sep 17 00:00:00 2001 From: Tianer Zhou Date: Mon, 20 Jan 2025 11:41:45 +0800 Subject: [PATCH 1/4] generate lazyForEachOps new interface Signed-off-by: Tianer Zhou --- arkoala-arkts/arkui/src/LazyForEach.ts | 7 +++++++ build.sh | 8 ++++++++ 2 files changed, 15 insertions(+) create mode 100755 build.sh diff --git a/arkoala-arkts/arkui/src/LazyForEach.ts b/arkoala-arkts/arkui/src/LazyForEach.ts index 9488d4fb9..adde4a473 100644 --- a/arkoala-arkts/arkui/src/LazyForEach.ts +++ b/arkoala-arkts/arkui/src/LazyForEach.ts @@ -75,6 +75,11 @@ class LazyForEachManager { if (!LazyForEachManager.isDummy) parent.setInsertMark(mark, moreUp) } + + static Prepare(parent: PeerNode): void { + if (!LazyForEachManager.isDummy) + LazyForEachOps.Prepare(parent.peer.ptr) + } } class VisibleRange { @@ -130,6 +135,8 @@ export function LazyForEach(dataSource: IDataSource, let generator = (element: T, index: number): int32 => keyGenerator ? hashCodeFromString(keyGenerator!(element, index)) : index as int32 let index: number = visibleRange.indexUp as number + + LazyForEachManager.Prepare(parent) LazyForEachManager.SetInsertMark(parent, mark.value, false) while (true) { console.log(`LazyForEach[${parent}]: index=${index}`) diff --git a/build.sh b/build.sh new file mode 100755 index 000000000..ab1d92395 --- /dev/null +++ b/build.sh @@ -0,0 +1,8 @@ + +#!/bin/bash +cd arkoala-arkts +npm run --prefix application clean +npm run arkoala:har-arm32 +npm run har-arm32 --prefix shopping +cd application +npm run launch \ No newline at end of file -- Gitee From 06495994a2f7be0b94aaaa3f04daabc2ceab7fa0 Mon Sep 17 00:00:00 2001 From: Tianer Zhou Date: Sun, 26 Jan 2025 14:57:51 +0800 Subject: [PATCH 2/4] setup range mode prototype Signed-off-by: Tianer Zhou --- arkoala-arkts/arkui/src/LazyForEach.ts | 36 +++++++++++++++---- .../generated/ArkArkui-customInterfaces.ts | 2 +- .../peers/CallbackDeserializeCall.ts | 3 +- .../arkui/src/generated/peers/Deserializer.ts | 2 +- arkoala-arkts/arkui/types/index-full.d.ts | 2 +- .../src/generated/arkoala_api_generated.h | 4 +-- .../native/src/generated/bridge_generated.cc | 2 +- .../generated/callback_deserialize_call.cc | 10 +++--- .../src/generated/callback_managed_caller.cc | 6 ++-- 9 files changed, 47 insertions(+), 20 deletions(-) diff --git a/arkoala-arkts/arkui/src/LazyForEach.ts b/arkoala-arkts/arkui/src/LazyForEach.ts index adde4a473..809a070c2 100644 --- a/arkoala-arkts/arkui/src/LazyForEach.ts +++ b/arkoala-arkts/arkui/src/LazyForEach.ts @@ -52,9 +52,9 @@ class LazyForEachManager { static isDummy: boolean = false // Special pointer to mark that more elements needed. static specialPointer: pointer = 1 - static OnRangeUpdate(parent: pointer, totalCount: int32, updater: (currentIndex: int32, currentMark: pointer) => void) { + static OnRangeUpdate(parent: pointer, totalCount: int32, updater: (currentIndex: int32, currentMark: pointer, e: int32) => void) { if (LazyForEachManager.isDummy) - scheduleCallback(() => updater(0, LazyForEachManager.specialPointer)) + scheduleCallback(() => updater(0, LazyForEachManager.specialPointer, totalCount - 1)) else LazyForEachOps.OnRangeUpdate(parent, totalCount, updater) } @@ -117,23 +117,45 @@ export function LazyForEach(dataSource: IDataSource, ) { let current = rememberMutableState(-1) let mark = rememberMutableState(nullptr) - let version = rememberMutableState(0) - console.log(`LazyForEach current=${current.value} version=${version.value} mark=${mark.value}`) + let end = rememberMutableState(-1) + let version = rememberMutableState(0) + const rangeMode = true + console.log(`LazyForEach current=${current.value} version=${version.value} mark=${mark.value}`) let parent = contextNode() const visibleRange = new VisibleRange(parent, current.value, current.value) remember(() => { - LazyForEachManager.OnRangeUpdate(visibleRange.parent, dataSource.totalCount() as int32, (currentIndex: int32, currentMark: pointer) => { - console.log(`LazyForEach[${parent}]: current updated to ${currentIndex} ${currentMark}`) + LazyForEachManager.OnRangeUpdate(visibleRange.parent, dataSource.totalCount() as int32, (currentIndex: int32, currentMark: pointer, e: int32) => { + console.log(`LazyForEach[${parent}]: current updated to ${currentIndex} ${currentMark}, e = ${e}`) + version.value++ + end.value = e current.value = currentIndex mark.value = currentMark - version.value++ }) }) // Subscribe to version changes. version.value let generator = (element: T, index: number): int32 => keyGenerator ? hashCodeFromString(keyGenerator!(element, index)) : index as int32 + + if (rangeMode) { + parent.setInsertMark(nullptr, false) + for (let i = current.value as int32; i <= end.value; i++) { + if (i < 0 || i >= dataSource.totalCount()) break + const element: T = dataSource.getData(i as int32) + memoEntry2( + __context(), + generator(element, i as int32), + (element: T, index: number): void => itemGenerator(element, index), + element, + i as int32 + ) + } + LazyForEachManager.Prepare(parent) // temp: use prepare to map node to index + parent.setInsertMark(nullptr, false) + return + } + let index: number = visibleRange.indexUp as number LazyForEachManager.Prepare(parent) diff --git a/arkoala-arkts/arkui/src/generated/ArkArkui-customInterfaces.ts b/arkoala-arkts/arkui/src/generated/ArkArkui-customInterfaces.ts index 6c1e7a6eb..b9cf5dc74 100644 --- a/arkoala-arkts/arkui/src/generated/ArkArkui-customInterfaces.ts +++ b/arkoala-arkts/arkui/src/generated/ArkArkui-customInterfaces.ts @@ -47,4 +47,4 @@ export enum PointerStyle { LOADING = 42, RUNNING = 43 } -export type Callback_RangeUpdate = (index: int32, mark: KPointer) => void; \ No newline at end of file +export type Callback_RangeUpdate = (index: int32, mark: KPointer, end: int32) => void; \ No newline at end of file diff --git a/arkoala-arkts/arkui/src/generated/peers/CallbackDeserializeCall.ts b/arkoala-arkts/arkui/src/generated/peers/CallbackDeserializeCall.ts index 6526327b5..d571ecb9f 100644 --- a/arkoala-arkts/arkui/src/generated/peers/CallbackDeserializeCall.ts +++ b/arkoala-arkts/arkui/src/generated/peers/CallbackDeserializeCall.ts @@ -992,7 +992,8 @@ export function deserializeAndCallCallback_RangeUpdate(thisDeserializer: Deseria const _call = (ResourceHolder.instance().get(_resourceId) as Callback_RangeUpdate) let index : int32 = thisDeserializer.readInt32() let mark : KPointer = thisDeserializer.readPointer() - _call(index, mark) + let end : int32 = thisDeserializer.readInt32() + _call(index, mark, end) } export function deserializeAndCallCallback_RefreshStatus_Void(thisDeserializer: Deserializer) { const _resourceId : int32 = thisDeserializer.readInt32() diff --git a/arkoala-arkts/arkui/src/generated/peers/Deserializer.ts b/arkoala-arkts/arkui/src/generated/peers/Deserializer.ts index 4dbed153d..6aeeaf368 100644 --- a/arkoala-arkts/arkui/src/generated/peers/Deserializer.ts +++ b/arkoala-arkts/arkui/src/generated/peers/Deserializer.ts @@ -11868,7 +11868,7 @@ export class Deserializer extends DeserializerBase { const _resource : CallbackResource = this.readCallbackResource() const _call : KPointer = this.readPointer() const _callSync : KPointer = this.readPointer() - return (index: int32, mark: KPointer):void => { const _argsSerializer : Serializer = Serializer.hold(); _argsSerializer.writeInt32(_resource.resourceId); _argsSerializer.writePointer(_call); _argsSerializer.writePointer(_callSync); _argsSerializer.writeInt32(index); _argsSerializer.writePointer(mark); (isSync) ? (InteropNativeModule._CallCallbackSync(797834474, _argsSerializer.asArray(), _argsSerializer.length())) : (InteropNativeModule._CallCallback(797834474, _argsSerializer.asArray(), _argsSerializer.length())); _argsSerializer.release(); return; } + return (index: int32, mark: KPointer, end: int32):void => { const _argsSerializer : Serializer = Serializer.hold(); _argsSerializer.writeInt32(_resource.resourceId); _argsSerializer.writePointer(_call); _argsSerializer.writePointer(_callSync); _argsSerializer.writeInt32(index); _argsSerializer.writePointer(mark); _argsSerializer.writeInt32(end); (isSync) ? (InteropNativeModule._CallCallbackSync(797834474, _argsSerializer.asArray(), _argsSerializer.length())) : (InteropNativeModule._CallCallback(797834474, _argsSerializer.asArray(), _argsSerializer.length())); _argsSerializer.release(); return; } } readDoubleAnimationParam(): DoubleAnimationParam { let valueDeserializer : Deserializer = this diff --git a/arkoala-arkts/arkui/types/index-full.d.ts b/arkoala-arkts/arkui/types/index-full.d.ts index 6e16050b0..143cb3b64 100644 --- a/arkoala-arkts/arkui/types/index-full.d.ts +++ b/arkoala-arkts/arkui/types/index-full.d.ts @@ -246,7 +246,7 @@ declare class UnifiedData { hasType(UnifiedData_type: string): boolean; getTypes(): string[]; } -declare type Callback_RangeUpdate = ((index: number, mark: number|bigint) => void); +declare type Callback_RangeUpdate = ((index: number, mark: number|bigint, end: number) => void); declare class LazyForEachOps { static NeedMoreElements(node: number|bigint, mark: number|bigint, direction: number): number|bigint; static OnRangeUpdate(node: number|bigint, totalCount: number, updater: Callback_RangeUpdate): void; diff --git a/arkoala/framework/native/src/generated/arkoala_api_generated.h b/arkoala/framework/native/src/generated/arkoala_api_generated.h index 33f3312bf..93b9c98a1 100644 --- a/arkoala/framework/native/src/generated/arkoala_api_generated.h +++ b/arkoala/framework/native/src/generated/arkoala_api_generated.h @@ -9739,8 +9739,8 @@ typedef struct Opt_ClickEvent { } Opt_ClickEvent; typedef struct Callback_RangeUpdate { Ark_CallbackResource resource; - void (*call)(const Ark_Int32 resourceId, const Ark_Int32 index, const Ark_NativePointer mark); - void (*callSync)(Ark_VMContext context, const Ark_Int32 resourceId, const Ark_Int32 index, const Ark_NativePointer mark); + void (*call)(const Ark_Int32 resourceId, const Ark_Int32 index, const Ark_NativePointer mark, const Ark_Int32 end); + void (*callSync)(Ark_VMContext context, const Ark_Int32 resourceId, const Ark_Int32 index, const Ark_NativePointer mark, const Ark_Int32 end); } Callback_RangeUpdate; typedef struct Opt_Callback_RangeUpdate { Ark_Tag tag; diff --git a/arkoala/framework/native/src/generated/bridge_generated.cc b/arkoala/framework/native/src/generated/bridge_generated.cc index bc9478f42..c77d66a86 100644 --- a/arkoala/framework/native/src/generated/bridge_generated.cc +++ b/arkoala/framework/native/src/generated/bridge_generated.cc @@ -18517,7 +18517,7 @@ KOALA_INTEROP_3(LazyForEachOps_NeedMoreElements, Ark_NativePointer, Ark_NativePo void impl_LazyForEachOps_OnRangeUpdate(Ark_NativePointer node, Ark_Int32 totalCount, uint8_t* thisArray, int32_t thisLength) { Deserializer thisDeserializer(thisArray, thisLength); - Callback_RangeUpdate updater_value = {thisDeserializer.readCallbackResource(), reinterpret_cast(thisDeserializer.readPointerOrDefault(reinterpret_cast(getManagedCallbackCaller(Kind_Callback_RangeUpdate)))), reinterpret_cast(thisDeserializer.readPointerOrDefault(reinterpret_cast(getManagedCallbackCallerSync(Kind_Callback_RangeUpdate))))};; + Callback_RangeUpdate updater_value = {thisDeserializer.readCallbackResource(), reinterpret_cast(thisDeserializer.readPointerOrDefault(reinterpret_cast(getManagedCallbackCaller(Kind_Callback_RangeUpdate)))), reinterpret_cast(thisDeserializer.readPointerOrDefault(reinterpret_cast(getManagedCallbackCallerSync(Kind_Callback_RangeUpdate))))};; GetAccessors()->getLazyForEachOpsAccessor()->OnRangeUpdate(node, totalCount, (const Callback_RangeUpdate*)&updater_value); } KOALA_INTEROP_V4(LazyForEachOps_OnRangeUpdate, Ark_NativePointer, Ark_Int32, uint8_t*, int32_t) diff --git a/arkoala/framework/native/src/generated/callback_deserialize_call.cc b/arkoala/framework/native/src/generated/callback_deserialize_call.cc index 57ffa5fb0..2c9a04d28 100644 --- a/arkoala/framework/native/src/generated/callback_deserialize_call.cc +++ b/arkoala/framework/native/src/generated/callback_deserialize_call.cc @@ -2550,21 +2550,23 @@ void deserializeAndCallCallback_RangeUpdate(uint8_t* thisArray, Ark_Int32 thisLe { Deserializer thisDeserializer = Deserializer(thisArray, thisLength); const Ark_Int32 _resourceId = thisDeserializer.readInt32(); - const auto _call = reinterpret_cast(thisDeserializer.readPointer()); + const auto _call = reinterpret_cast(thisDeserializer.readPointer()); thisDeserializer.readPointer(); Ark_Int32 index = thisDeserializer.readInt32(); Ark_NativePointer mark = thisDeserializer.readPointer(); - _call(_resourceId, index, mark); + Ark_Int32 end = thisDeserializer.readInt32(); + _call(_resourceId, index, mark, end); } void deserializeAndCallSyncCallback_RangeUpdate(Ark_VMContext vmContext, uint8_t* thisArray, Ark_Int32 thisLength) { Deserializer thisDeserializer = Deserializer(thisArray, thisLength); const Ark_Int32 _resourceId = thisDeserializer.readInt32(); thisDeserializer.readPointer(); - const auto _callSync = reinterpret_cast(thisDeserializer.readPointer()); + const auto _callSync = reinterpret_cast(thisDeserializer.readPointer()); Ark_Int32 index = thisDeserializer.readInt32(); Ark_NativePointer mark = thisDeserializer.readPointer(); - _callSync(vmContext, _resourceId, index, mark); + Ark_Int32 end = thisDeserializer.readInt32(); + _callSync(vmContext, _resourceId, index, mark, end); } void deserializeAndCallCallback_RefreshStatus_Void(uint8_t* thisArray, Ark_Int32 thisLength) { diff --git a/arkoala/framework/native/src/generated/callback_managed_caller.cc b/arkoala/framework/native/src/generated/callback_managed_caller.cc index e606ee7b1..9c2fd3a76 100644 --- a/arkoala/framework/native/src/generated/callback_managed_caller.cc +++ b/arkoala/framework/native/src/generated/callback_managed_caller.cc @@ -2834,7 +2834,7 @@ void callManagedCallback_PreparedInfo_VoidSync(Ark_VMContext vmContext, Ark_Int3 argsSerializer.writePreparedInfo(parameter); KOALA_INTEROP_CALL_VOID(vmContext, 1, sizeof(__buffer), __buffer); } -void callManagedCallback_RangeUpdate(Ark_Int32 resourceId, Ark_Int32 index, Ark_NativePointer mark) +void callManagedCallback_RangeUpdate(Ark_Int32 resourceId, Ark_Int32 index, Ark_NativePointer mark, Ark_Int32 end) { CallbackBuffer __buffer = {{}, {}}; const Ark_CallbackResource __callbackResource = {resourceId, holdManagedCallbackResource, releaseManagedCallbackResource}; @@ -2844,9 +2844,10 @@ void callManagedCallback_RangeUpdate(Ark_Int32 resourceId, Ark_Int32 index, Ark_ argsSerializer.writeInt32(resourceId); argsSerializer.writeInt32(index); argsSerializer.writePointer(mark); + argsSerializer.writeInt32(end); enqueueArkoalaCallback(&__buffer); } -void callManagedCallback_RangeUpdateSync(Ark_VMContext vmContext, Ark_Int32 resourceId, Ark_Int32 index, Ark_NativePointer mark) +void callManagedCallback_RangeUpdateSync(Ark_VMContext vmContext, Ark_Int32 resourceId, Ark_Int32 index, Ark_NativePointer mark, Ark_Int32 end) { uint8_t __buffer[60 * 4]; Serializer argsSerializer = Serializer(__buffer, sizeof(__buffer), nullptr); @@ -2854,6 +2855,7 @@ void callManagedCallback_RangeUpdateSync(Ark_VMContext vmContext, Ark_Int32 reso argsSerializer.writeInt32(resourceId); argsSerializer.writeInt32(index); argsSerializer.writePointer(mark); + argsSerializer.writeInt32(end); KOALA_INTEROP_CALL_VOID(vmContext, 1, sizeof(__buffer), __buffer); } void callManagedCallback_RefreshStatus_Void(Ark_Int32 resourceId, Ark_RefreshStatus state) -- Gitee From fa4e99a853ecdbd76f83f6bff35f518a3154d4dd Mon Sep 17 00:00:00 2001 From: Tianer Zhou Date: Mon, 27 Jan 2025 11:29:03 +0800 Subject: [PATCH 3/4] LazyForEach dataChangeListener proposal Signed-off-by: Tianer Zhou --- arkoala-arkts/arkui/src/LazyForEach.ts | 125 ++++++++++++++++-- .../generated/ArkArkui-customInterfaces.ts | 7 +- .../src/generated/ArkLazyForEachInterfaces.ts | 33 ++++- .../ArkLazyForEachOpsMaterialized.ts | 11 ++ .../arkts/ArkUIGeneratedNativeModule.ts | 1 + .../arkui/src/generated/arkts/type_check.ts | 5 +- .../arkui/src/generated/ts/type_check.ts | 16 ++- arkoala-arkts/arkui/types/index-full.d.ts | 6 + .../native/src/generated/Serializers.h | 29 ++++ .../src/generated/arkoala_api_generated.h | 13 ++ .../native/src/generated/bridge_generated.cc | 5 + .../native/src/generated/dummy_impl.cc | 19 +++ .../native/src/generated/real_impl.cc | 12 ++ arkoala/framework/src/generated/EnumsImpl.ts | 5 + 14 files changed, 269 insertions(+), 18 deletions(-) diff --git a/arkoala-arkts/arkui/src/LazyForEach.ts b/arkoala-arkts/arkui/src/LazyForEach.ts index 809a070c2..e9a1f640b 100644 --- a/arkoala-arkts/arkui/src/LazyForEach.ts +++ b/arkoala-arkts/arkui/src/LazyForEach.ts @@ -18,14 +18,108 @@ import { hashCodeFromString, int32 } from "@koalaui/common" import { nullptr, pointer } from "@koalaui/interop"; import { PeerNode } from "./generated/PeerNode"; import { LazyForEachOps } from "./generated/ArkLazyForEachOpsMaterialized" +import { LazyNotificationType } from "./generated/ArkArkui-customInterfaces"; +import { DataChangeListener, DataAddOperation, DataChangeOperation, DataDeleteOperation, DataExchangeOperation, DataMoveOperation, DataOperation, DataOperationType } from "./generated/ArkLazyForEachInterfaces" + + +class InternalListener implements DataChangeListener { + parent: pointer = nullptr; + changeIdx = Number.MAX_SAFE_INTEGER; // Tracks the minimum item index that has changed + + /** + * Notify the change of data to backend + */ + flush(): void { + if (this.changeIdx !== Number.MAX_SAFE_INTEGER) { + // Notify the change with the cached index and count + LazyForEachOps.NotifyChange( + this.parent, + this.changeIdx as int32, + 0, + 0 + ); + } + // Reset the cache after flushing + this.changeIdx = Number.MAX_SAFE_INTEGER; + } + + onDataReloaded(): void { + this.changeIdx = 0; + } + + onDataAdd(index: number): void { + this.changeIdx = Math.min(this.changeIdx, index); + } + + onDataMove(from: number, to: number): void { + this.changeIdx = Math.min(this.changeIdx, Math.min(from, to)); + } + + onDataDelete(index: number): void { + this.changeIdx = Math.min(this.changeIdx, index); + } + + onDataChange(index: number): void { + this.changeIdx = Math.min(this.changeIdx, index); + } + + onDatasetChange(dataOperations: DataOperation[]): void { + // Iterate through each operation and update the cache + for (const operation of dataOperations) { + switch (operation.type) { + case DataOperationType.ADD: { + const addOp = operation as DataAddOperation; + this.changeIdx = Math.min(this.changeIdx, addOp.index); + break; + } + case DataOperationType.DELETE: { + const deleteOp = operation as DataDeleteOperation; + this.changeIdx = Math.min(this.changeIdx, deleteOp.index); + break; + } + case DataOperationType.CHANGE: { + const changeOp = operation as DataChangeOperation; + this.changeIdx = Math.min(this.changeIdx, changeOp.index); + break; + } + case DataOperationType.MOVE: { + const moveOp = operation as DataMoveOperation; + this.changeIdx = Math.min(this.changeIdx, Math.min(moveOp.index.from, moveOp.index.to)); + break; + } + case DataOperationType.EXCHANGE: { + const exchangeOp = operation as DataExchangeOperation; + this.changeIdx = Math.min(this.changeIdx, Math.min(exchangeOp.index.start, exchangeOp.index.end)); + break; + } + case DataOperationType.RELOAD: { + this.changeIdx = 0; + break; + } + } + } + } + + // deprecated + onDataAdded(index: number): void { + throw new Error("Method not implemented."); + } + onDataMoved(from: number, to: number): void { + throw new Error("Method not implemented."); + } + onDataDeleted(index: number): void { + throw new Error("Method not implemented."); + } + onDataChanged(index: number): void { + throw new Error("Method not implemented."); + } +} -// TODO: proper import [DataChangeListener] from lazy_for_each.d.ts -export type DataChangeListener = Object /** * Developers need to implement this interface to provide data to LazyForEach component. * @since 7 */ - export interface IDataSource { +export interface IDataSource { /** * Total data count. * @since 7 @@ -50,7 +144,7 @@ export type DataChangeListener = Object class LazyForEachManager { static isDummy: boolean = false - // Special pointer to mark that more elements needed. + // Special pointer to mark that more elements needed. static specialPointer: pointer = 1 static OnRangeUpdate(parent: pointer, totalCount: int32, updater: (currentIndex: int32, currentMark: pointer, e: int32) => void) { if (LazyForEachManager.isDummy) @@ -115,6 +209,7 @@ export function LazyForEach(dataSource: IDataSource, itemGenerator: (item: T, index: number) => void, keyGenerator?: (item: T, index: number) => string, ) { + let listener = remember(() => new InternalListener()) let current = rememberMutableState(-1) let mark = rememberMutableState(nullptr) let end = rememberMutableState(-1) @@ -123,6 +218,7 @@ export function LazyForEach(dataSource: IDataSource, console.log(`LazyForEach current=${current.value} version=${version.value} mark=${mark.value}`) let parent = contextNode() + listener.parent = parent.peer.ptr const visibleRange = new VisibleRange(parent, current.value, current.value) remember(() => { LazyForEachManager.OnRangeUpdate(visibleRange.parent, dataSource.totalCount() as int32, (currentIndex: int32, currentMark: pointer, e: int32) => { @@ -132,10 +228,13 @@ export function LazyForEach(dataSource: IDataSource, current.value = currentIndex mark.value = currentMark }) + dataSource.registerDataChangeListener(listener) }) // Subscribe to version changes. version.value + listener.flush() + let generator = (element: T, index: number): int32 => keyGenerator ? hashCodeFromString(keyGenerator!(element, index)) : index as int32 if (rangeMode) { @@ -160,17 +259,17 @@ export function LazyForEach(dataSource: IDataSource, LazyForEachManager.Prepare(parent) LazyForEachManager.SetInsertMark(parent, mark.value, false) - while (true) { + while (true) { console.log(`LazyForEach[${parent}]: index=${index}`) - if (index < 0 || index >= dataSource.totalCount()) break - const element: T = dataSource.getData(index as number) - memoEntry2( - __context(), + if (index < 0 || index >= dataSource.totalCount()) break + const element: T = dataSource.getData(index as number) + memoEntry2( + __context(), generator(element, index), (element: T, index: number): void => { itemGenerator(element, index) }, - element, + element, index - ) + ) let moreUp = visibleRange.needFillUp() if (moreUp && visibleRange.indexUp > 0) { index = --visibleRange.indexUp @@ -181,6 +280,6 @@ export function LazyForEach(dataSource: IDataSource, index = -1 } LazyForEachManager.SetInsertMark(parent, moreUp ? visibleRange.markUp : visibleRange.markDown, moreUp) - } - parent.setInsertMark(nullptr, false) + } + parent.setInsertMark(nullptr, false) } diff --git a/arkoala-arkts/arkui/src/generated/ArkArkui-customInterfaces.ts b/arkoala-arkts/arkui/src/generated/ArkArkui-customInterfaces.ts index b9cf5dc74..434625c8e 100644 --- a/arkoala-arkts/arkui/src/generated/ArkArkui-customInterfaces.ts +++ b/arkoala-arkts/arkui/src/generated/ArkArkui-customInterfaces.ts @@ -47,4 +47,9 @@ export enum PointerStyle { LOADING = 42, RUNNING = 43 } -export type Callback_RangeUpdate = (index: int32, mark: KPointer, end: int32) => void; \ No newline at end of file +export type Callback_RangeUpdate = (index: int32, mark: KPointer, end: int32) => void; +export enum LazyNotificationType { + START_CHANGE_POSITION = 0, + END_CHANGE_POSITION = 1, + START_AND_END_CHANGE_POSITION = 2 +} \ No newline at end of file diff --git a/arkoala-arkts/arkui/src/generated/ArkLazyForEachInterfaces.ts b/arkoala-arkts/arkui/src/generated/ArkLazyForEachInterfaces.ts index 226f31ffc..5e9f4823a 100644 --- a/arkoala-arkts/arkui/src/generated/ArkLazyForEachInterfaces.ts +++ b/arkoala-arkts/arkui/src/generated/ArkLazyForEachInterfaces.ts @@ -9,6 +9,20 @@ export enum DataOperationType { CHANGE = "change", RELOAD = "reload" } +export interface DataReloadOperation { + type: DataOperationType +} +export interface DataAddOperation { + type: DataOperationType, + index: number, + count?: number, + key?: string | Array +} +export interface DataChangeOperation { + type: DataOperationType, + index: number, + key?: string +} export interface DataDeleteOperation { type: DataOperationType; index: number; @@ -36,6 +50,21 @@ export interface DataExchangeOperation { index: ExchangeIndex; key?: ExchangeKey; } -export interface DataOperation { - stub: string; +export type DataOperation = + DataAddOperation | DataDeleteOperation | DataChangeOperation | DataMoveOperation | DataExchangeOperation | DataReloadOperation; +// export interface DataOperation { +// stub: string; +// } + +export interface DataChangeListener { + onDataReloaded(): void; + onDataAdded(index: number): void; + onDataAdd(index: number): void; + onDataMoved(from: number, to: number): void; + onDataMove(from: number, to: number): void; + onDataDeleted(index: number): void; + onDataDelete(index: number): void; + onDataChanged(index: number): void; + onDataChange(index: number): void; + onDatasetChange(dataOperations: DataOperation[]): void; } \ No newline at end of file diff --git a/arkoala-arkts/arkui/src/generated/ArkLazyForEachOpsMaterialized.ts b/arkoala-arkts/arkui/src/generated/ArkLazyForEachOpsMaterialized.ts index 651efd58d..ceabeaf60 100644 --- a/arkoala-arkts/arkui/src/generated/ArkLazyForEachOpsMaterialized.ts +++ b/arkoala-arkts/arkui/src/generated/ArkLazyForEachOpsMaterialized.ts @@ -92,6 +92,14 @@ export class LazyForEachOps implements MaterializedBase { LazyForEachOps.Prepare_serialize(node_casted) return } + static NotifyChange(node: KPointer, changeIdx: int32, count: int32, notificationType: int32): void { + const node_casted = node as (KPointer) + const changeIdx_casted = changeIdx as (int32) + const count_casted = count as (int32) + const notificationType_casted = notificationType as (int32) + LazyForEachOps.NotifyChange_serialize(node_casted, changeIdx_casted, count_casted, notificationType_casted) + return + } private static NeedMoreElements_serialize(node: KPointer, mark: KPointer, direction: int32): KPointer { const retval = ArkUIGeneratedNativeModule._LazyForEachOps_NeedMoreElements(node, mark, direction) return retval @@ -108,6 +116,9 @@ export class LazyForEachOps implements MaterializedBase { private static Prepare_serialize(node: KPointer): void { ArkUIGeneratedNativeModule._LazyForEachOps_Prepare(node) } + private static NotifyChange_serialize(node: KPointer, changeIdx: int32, count: int32, notificationType: int32): void { + ArkUIGeneratedNativeModule._LazyForEachOps_NotifyChange(node, changeIdx, count, notificationType) + } } export class LazyForEachOpsInternal { public static fromPtr(ptr: KPointer): LazyForEachOps { diff --git a/arkoala-arkts/arkui/src/generated/arkts/ArkUIGeneratedNativeModule.ts b/arkoala-arkts/arkui/src/generated/arkts/ArkUIGeneratedNativeModule.ts index b3aec229b..4ec41561d 100644 --- a/arkoala-arkts/arkui/src/generated/arkts/ArkUIGeneratedNativeModule.ts +++ b/arkoala-arkts/arkui/src/generated/arkts/ArkUIGeneratedNativeModule.ts @@ -1548,6 +1548,7 @@ export class ArkUIGeneratedNativeModule { native static _LazyForEachOps_OnRangeUpdate(node: KPointer, totalCount: KInt, thisArray: KUint8ArrayPtr, thisLength: int32): void native static _LazyForEachOps_SetCurrentIndex(node: KPointer, index: KInt): void native static _LazyForEachOps_Prepare(node: KPointer): void + native static _LazyForEachOps_NotifyChange(node: KPointer, changeIdx: KInt, count: KInt, notificationType: KInt): void native static _DrawingCanvas_ctor(thisArray: KUint8ArrayPtr, thisLength: int32): KPointer native static _DrawingCanvas_getFinalizer(): KPointer native static _DrawingCanvas_drawRect(ptr: KPointer, left: number, top: number, right: number, bottom: number): void diff --git a/arkoala-arkts/arkui/src/generated/arkts/type_check.ts b/arkoala-arkts/arkui/src/generated/arkts/type_check.ts index fb21a6cb4..ecccdbcb2 100644 --- a/arkoala-arkts/arkui/src/generated/arkts/type_check.ts +++ b/arkoala-arkts/arkui/src/generated/arkts/type_check.ts @@ -7,7 +7,7 @@ import { ICurve } from "./../ArkICurveMaterialized" import { Callback_Number_Void, Callback_Void, Callback_String_Void, Literal_Want_want, Callback_DismissDialogAction_Void, Literal_Number_day_month_year, Type_CalendarInterface_value, Callback_CalendarSelectedDate_Void, Callback_CalendarRequestedData_Void, Callback_Date_Void, Callback_Boolean_Void, Literal_String_anchor_HorizontalAlign_align, Literal_String_anchor_VerticalAlign_align, Literal_TransitionEffect_appear_disappear, Tuple_Number_Number, Callback_DismissContentCoverAction_Void, Type_SheetOptions_detents, Callback_SheetDismiss_Void, Callback_DismissSheetAction_Void, Callback_SpringBackAction_Void, Callback_SheetType_Void, Literal_String_value_Callback_Void_action, Literal_Boolean_isVisible, Literal_ResourceColor_color, Callback_Literal_Boolean_isVisible_Void, Callback_DismissPopupAction_Void, Literal_Number_offset_span, Literal_Union_Number_Literal_Number_offset_span_lg_md_sm_xs, Type_CommonMethod_linearGradient_value, Tuple_ResourceColor_Number, Type_CommonMethod_sweepGradient_value, Tuple_Length_Length, Type_CommonMethod_radialGradient_value, Literal_Alignment_align, Callback_Array_TouchTestInfo_TouchResult, Callback_ClickEvent_Void, Callback_Boolean_HoverEvent_Void, Callback_MouseEvent_Void, Callback_TouchEvent_Void, Callback_KeyEvent_Void, Callback_KeyEvent_Boolean, Callback_Area_Area_Void, Callback_DragEvent_String_Union_CustomBuilder_DragItemInfo, Callback_DragEvent_String_Void, Callback_PreDragStatus_Void, Callback_GestureInfo_BaseGestureEvent_GestureJudgeResult, Callback_TouchEvent_HitTestMode, Literal_Empty, Callback_Number_Number_Void, Literal_String_key_Any_defaultValue, Callback_DatePickerResult_Void, Callback_TerminationInfo_Void, Literal_Number_errcode_String_msg, Callback_FormCallbackInfo_Void, Callback_Literal_Number_errcode_String_msg_Void, Callback_Any_Void, Tuple_Union_ResourceColor_LinearGradient_common_Number, Callback_GestureEvent_Void, Literal_Number_duration_fingers_Boolean_repeat, Literal_Number_distance_fingers_PanDirection_direction, Literal_Number_fingers_speed_SwipeDirection_direction, Literal_Number_distance_fingers, Literal_Number_angle_fingers, Callback_Number_Tuple_Number_Number, Callback_Number_Tuple_Number_Number_Number_Number, Tuple_Number_Number_Number_Number, Literal_Number_offsetRemain, Callback_Number_Number_ComputedBarAttribute, Callback_ItemDragInfo_Number_CustomBuilder, Callback_ItemDragInfo_Void, Callback_ItemDragInfo_Number_Number_Void, Callback_ItemDragInfo_Number_Void, Callback_ItemDragInfo_Number_Number_Boolean_Void, Callback_Number_ScrollState_Literal_Number_offsetRemain, Type_ImageAttribute_onComplete_callback_event, Callback_Type_ImageAttribute_onComplete_callback_event_Void, Callback_Number_Number_Number_Void, Callback_Number_Boolean, Callback_Number_Number_Boolean, Callback_SwipeActionState_Void, Callback_ClickEvent_LocationButtonOnClickResult_Void, Callback_Boolean, Callback_NavDestinationContext_Void, Callback_PopInfo_Void, Tuple_Dimension_Dimension, Callback_NavigationTitleMode_Void, Callback_NavigationMode_Void, Callback_String_Unknown_Void, Type_NavigationAttribute_customNavContentTransition_delegate, Callback_NavigationTransitionProxy_Void, Literal_String_target_NavigationType_type, Callback_Number_Number_PanelMode_Void, Callback_ClickEvent_PasteButtonOnClickResult_Void, Callback_Array_Number_Void, Callback_RefreshStatus_Void, Callback_RichEditorSelection_Void, Callback_RichEditorRange_Void, Callback_RichEditorInsertValue_Boolean, Callback_RichEditorTextSpanResult_Void, Callback_TextRange_Void, Callback_RichEditorDeleteValue_Boolean, Callback_RichEditorChangeValue_Boolean, Callback_CutEvent_Void, Callback_CopyEvent_Void, Callback_ClickEvent_SaveButtonOnClickResult_Void, Literal_Boolean_next_Axis_direction, Callback_InsertValue_Boolean, Callback_InsertValue_Void, Callback_DeleteValue_Boolean, Callback_DeleteValue_Void, Callback_Number_String_Void, Callback_Number_SliderChangeMode_Void, Literal_Number_index, Callback_SwiperContentTransitionProxy_Void, Callback_TabContentTransitionProxy_Void, Callback_EnterKeyType_Void, Callback_String_PasteEvent_Void, Callback_StyledStringChangeValue_Boolean, Callback_String_Number_Void, Type_TextPickerAttribute_onChange_callback, Callback_TextPickerResult_Void, Callback_TimePickerResult_Void, Callback_FullscreenInfo_Void, Callback_PreparedInfo_Void, Callback_PlaybackInfo_Void, Literal_String_script_Callback_String_Void_callback_, Literal_String_baseUrl_data_encoding_historyUrl_mimeType, Literal_Union_String_Resource_url_Array_Header_headers, Literal_Object_object__String_name_Array_String_methodList, Literal_Union_String_WebResourceRequest_data, Literal_Function_handler_Object_error, Literal_Object_detail, Literal_Function_callback__Object_fileSelector, Callback_OnPageEndEvent_Void, Callback_OnPageBeginEvent_Void, Callback_OnProgressChangeEvent_Void, Callback_OnTitleReceiveEvent_Void, Callback_OnGeolocationShowEvent_Void, Callback_OnAlertEvent_Boolean, Callback_OnBeforeUnloadEvent_Boolean, Callback_OnConfirmEvent_Boolean, Callback_OnPromptEvent_Boolean, Callback_OnConsoleEvent_Boolean, Callback_OnErrorReceiveEvent_Void, Callback_OnHttpErrorReceiveEvent_Void, Callback_OnDownloadStartEvent_Void, Callback_OnRefreshAccessedHistoryEvent_Void, Type_WebAttribute_onUrlLoadIntercept_callback, Callback_Literal_Function_handler_Object_error_Void, Callback_OnRenderExitedEvent_Void, Callback_OnShowFileSelectorEvent_Boolean, Callback_Literal_Object_detail_Boolean, Type_WebAttribute_onFileSelectorShow_callback, Callback_OnResourceLoadEvent_Void, Callback_OnScaleChangeEvent_Void, Callback_OnHttpAuthRequestEvent_Boolean, Callback_OnInterceptRequestEvent_WebResourceResponse, Callback_OnPermissionRequestEvent_Void, Callback_OnScreenCaptureRequestEvent_Void, Callback_OnContextMenuShowEvent_Boolean, Callback_OnSearchResultReceiveEvent_Void, Callback_OnScrollEvent_Void, Callback_OnSslErrorEventReceiveEvent_Void, Callback_OnClientAuthenticationEvent_Void, Callback_OnWindowNewEvent_Void, Callback_OnTouchIconUrlReceivedEvent_Void, Callback_OnFaviconReceivedEvent_Void, Callback_OnPageVisibleEvent_Void, Callback_OnDataResubmittedEvent_Void, Callback_OnAudioStateChangedEvent_Void, Callback_OnFirstContentfulPaintEvent_Void, Callback_OnLoadInterceptEvent_Boolean, Callback_OnOverScrollEvent_Void, Callback_NativeEmbedDataInfo_Void, Callback_NativeEmbedTouchInfo_Void, Literal_String_plainText, Callback_Literal_String_plainText_Void, Literal_Number_surfaceHeight_surfaceWidth, Type_XComponentInterface_value, Callback_UIExtensionProxy_Void, Literal_Number_code_Want_want, Callback_Literal_Number_code_Want_want_Void } from "./../SyntheticDeclarations" import { AnimationExtender } from "./../ArkAnimationExtenderMaterialized" import { AnimateParam, UIContext, CommonMethod, DismissReason, Rectangle, BlurStyle, ShadowOptions, ShadowStyle, HoverModeAreaType, CommonConfiguration, ContentModifier, PickerTextStyle, PickerDialogButtonStyle, CustomBuilder, CommonShapeMethod, PointLightStyle, ComponentOptions, InputCounterOptions, TextDecorationOptions, ProvideOptions, AnimatableArithmetic, Context, Configuration, ExpectedFrameRateRange, FinishCallbackType, TouchTestStrategy, MotionPathOptions, sharedTransitionOptions, GeometryTransitionOptions, TransitionHierarchyStrategy, TranslateOptions, ScaleOptions, AlignRuleOption, LocalizedHorizontalAlignParam, LocalizedVerticalAlignParam, LocalizedAlignRuleOptions, ChainStyle, RotateOptions, TransitionOptions, TransitionEdge, TransitionEffects, DrawContext, PreviewParams, ItemDragInfo, EffectType, PreDragStatus, DragItemInfo, EventTarget, SourceType, SourceTool, RepeatMode, BlurStyleActivePolicy, ThemeColorMode, AdaptiveColor, ModalTransition, BackgroundBlurStyleOptions, BlurStyleOptions, ForegroundBlurStyleOptions, BlurOptions, BackgroundEffectOptions, ForegroundEffectOptions, ShadowType, MultiShadowOptions, SafeAreaType, SafeAreaEdge, LayoutSafeAreaType, LayoutSafeAreaEdge, SheetSize, BorderImageOption, LinearGradient_common, TouchObject, HistoricalPoint, DragBehavior, Summary, UniformDataType, DragResult, BlendMode, BlendApplyType, IntentionCode, BindOptions, DismissContentCoverAction, ContentCoverOptions, SheetTitleOptions, SheetType, SheetMode, ScrollSizeMode, SheetKeyboardAvoidMode, SheetDismiss, DismissSheetAction, SpringBackAction, SheetOptions, StateStyles, PopupMessageOptions, DismissPopupAction, PopupOptions, CustomPopupOptions, MenuPreviewMode, ContextMenuAnimationOptions, AnimationRange, ContextMenuOptions, MenuOptions, TouchTestInfo, RectResult, TouchResult, PixelStretchEffectOptions, ClickEffect, FadingEdgeOptions, NestedScrollOptions, MenuElement, SymbolGlyphModifier, OutlineStyle, DragPreviewMode, MenuPolicy, ImageModifier, DragPreviewOptions, DragInteractionOptions, InvertOptions, CircleShape, EllipseShape, PathShape, RectShape, PixelRoundPolicy, VisualEffect, Filter, AccessibilityCallback, MotionBlurOptions, BackgroundBrightnessOptions, GestureRecognizerJudgeBeginCallback, ShouldBuiltInRecognizerParallelWithCallback, SizeChangeCallback, TransitionFinishCallback, LinearGradientBlurOptions, ComponentContent, OverlayOptions, Blender, VisibleAreaChangeCallback, CommonAttribute, CommonInterface, OverlayOffset, FractionStop, MotionBlurAnchor, LayoutBorderInfo, LayoutInfo, LayoutChild, GeometryInfo, SizeResult, Layoutable, Measurable, MeasureResult, NavDestinationInfo, NavigationInfo, RouterPageInfo, Theme, CaretOffset, ContentClipMode, ScrollableCommonMethod, EdgeEffectOptions, ScrollResult, OnWillScrollCallback, OnMoveHandler, LightSource, KeyframeAnimateParam, KeyframeState, Callback, VisibleAreaEventOptions, HoverCallback, UIGestureEvent, SelectionOptions, KeyboardAvoidMode } from "./../ArkCommonInterfaces" -import { PointerStyle, Callback_RangeUpdate } from "./../ArkArkui-customInterfaces" +import { PointerStyle, LazyNotificationType, Callback_RangeUpdate } from "./../ArkArkui-customInterfaces" import { UnifiedData } from "./../ArkUnifiedDataMaterialized" import { LazyForEachOps } from "./../ArkLazyForEachOpsMaterialized" import { DrawingCanvas } from "./../ArkDrawingCanvasMaterialized" @@ -1740,6 +1740,9 @@ export class TypeChecker { static isLazyForEachOps(value: object|string|number|undefined|null): boolean { return value instanceof LazyForEachOps } + static isLazyNotificationType(value: object|string|number|undefined|null): boolean { + return value instanceof LazyNotificationType + } static isLeadingMarginPlaceholder(value: object|string|number|undefined|null, arg0: boolean, arg1: boolean): boolean { return value instanceof LeadingMarginPlaceholder } diff --git a/arkoala-arkts/arkui/src/generated/ts/type_check.ts b/arkoala-arkts/arkui/src/generated/ts/type_check.ts index c78e8ce4d..b506869e5 100644 --- a/arkoala-arkts/arkui/src/generated/ts/type_check.ts +++ b/arkoala-arkts/arkui/src/generated/ts/type_check.ts @@ -7,7 +7,7 @@ import { ICurve } from "./../ArkICurveMaterialized" import { Callback_Number_Void, Callback_Void, Callback_String_Void, Literal_Want_want, Callback_DismissDialogAction_Void, Literal_Number_day_month_year, Type_CalendarInterface_value, Callback_CalendarSelectedDate_Void, Callback_CalendarRequestedData_Void, Callback_Date_Void, Callback_Boolean_Void, Literal_String_anchor_HorizontalAlign_align, Literal_String_anchor_VerticalAlign_align, Literal_TransitionEffect_appear_disappear, Tuple_Number_Number, Callback_DismissContentCoverAction_Void, Type_SheetOptions_detents, Callback_SheetDismiss_Void, Callback_DismissSheetAction_Void, Callback_SpringBackAction_Void, Callback_SheetType_Void, Literal_String_value_Callback_Void_action, Literal_Boolean_isVisible, Literal_ResourceColor_color, Callback_Literal_Boolean_isVisible_Void, Callback_DismissPopupAction_Void, Literal_Number_offset_span, Literal_Union_Number_Literal_Number_offset_span_lg_md_sm_xs, Type_CommonMethod_linearGradient_value, Tuple_ResourceColor_Number, Type_CommonMethod_sweepGradient_value, Tuple_Length_Length, Type_CommonMethod_radialGradient_value, Literal_Alignment_align, Callback_Array_TouchTestInfo_TouchResult, Callback_ClickEvent_Void, Callback_Boolean_HoverEvent_Void, Callback_MouseEvent_Void, Callback_TouchEvent_Void, Callback_KeyEvent_Void, Callback_KeyEvent_Boolean, Callback_Area_Area_Void, Callback_DragEvent_String_Union_CustomBuilder_DragItemInfo, Callback_DragEvent_String_Void, Callback_PreDragStatus_Void, Callback_GestureInfo_BaseGestureEvent_GestureJudgeResult, Callback_TouchEvent_HitTestMode, Literal_Empty, Callback_Number_Number_Void, Literal_String_key_Any_defaultValue, Callback_DatePickerResult_Void, Callback_TerminationInfo_Void, Literal_Number_errcode_String_msg, Callback_FormCallbackInfo_Void, Callback_Literal_Number_errcode_String_msg_Void, Callback_Any_Void, Tuple_Union_ResourceColor_LinearGradient_common_Number, Callback_GestureEvent_Void, Literal_Number_duration_fingers_Boolean_repeat, Literal_Number_distance_fingers_PanDirection_direction, Literal_Number_fingers_speed_SwipeDirection_direction, Literal_Number_distance_fingers, Literal_Number_angle_fingers, Callback_Number_Tuple_Number_Number, Callback_Number_Tuple_Number_Number_Number_Number, Tuple_Number_Number_Number_Number, Literal_Number_offsetRemain, Callback_Number_Number_ComputedBarAttribute, Callback_ItemDragInfo_Number_CustomBuilder, Callback_ItemDragInfo_Void, Callback_ItemDragInfo_Number_Number_Void, Callback_ItemDragInfo_Number_Void, Callback_ItemDragInfo_Number_Number_Boolean_Void, Callback_Number_ScrollState_Literal_Number_offsetRemain, Type_ImageAttribute_onComplete_callback_event, Callback_Type_ImageAttribute_onComplete_callback_event_Void, Callback_Number_Number_Number_Void, Callback_Number_Boolean, Callback_Number_Number_Boolean, Callback_SwipeActionState_Void, Callback_ClickEvent_LocationButtonOnClickResult_Void, Callback_Boolean, Callback_NavDestinationContext_Void, Callback_PopInfo_Void, Tuple_Dimension_Dimension, Callback_NavigationTitleMode_Void, Callback_NavigationMode_Void, Callback_String_Unknown_Void, Type_NavigationAttribute_customNavContentTransition_delegate, Callback_NavigationTransitionProxy_Void, Literal_String_target_NavigationType_type, Callback_Number_Number_PanelMode_Void, Callback_ClickEvent_PasteButtonOnClickResult_Void, Callback_Array_Number_Void, Callback_RefreshStatus_Void, Callback_RichEditorSelection_Void, Callback_RichEditorRange_Void, Callback_RichEditorInsertValue_Boolean, Callback_RichEditorTextSpanResult_Void, Callback_TextRange_Void, Callback_RichEditorDeleteValue_Boolean, Callback_RichEditorChangeValue_Boolean, Callback_CutEvent_Void, Callback_CopyEvent_Void, Callback_ClickEvent_SaveButtonOnClickResult_Void, Literal_Boolean_next_Axis_direction, Callback_InsertValue_Boolean, Callback_InsertValue_Void, Callback_DeleteValue_Boolean, Callback_DeleteValue_Void, Callback_Number_String_Void, Callback_Number_SliderChangeMode_Void, Literal_Number_index, Callback_SwiperContentTransitionProxy_Void, Callback_TabContentTransitionProxy_Void, Callback_EnterKeyType_Void, Callback_String_PasteEvent_Void, Callback_StyledStringChangeValue_Boolean, Callback_String_Number_Void, Type_TextPickerAttribute_onChange_callback, Callback_TextPickerResult_Void, Callback_TimePickerResult_Void, Callback_FullscreenInfo_Void, Callback_PreparedInfo_Void, Callback_PlaybackInfo_Void, Literal_String_script_Callback_String_Void_callback_, Literal_String_baseUrl_data_encoding_historyUrl_mimeType, Literal_Union_String_Resource_url_Array_Header_headers, Literal_Object_object__String_name_Array_String_methodList, Literal_Union_String_WebResourceRequest_data, Literal_Function_handler_Object_error, Literal_Object_detail, Literal_Function_callback__Object_fileSelector, Callback_OnPageEndEvent_Void, Callback_OnPageBeginEvent_Void, Callback_OnProgressChangeEvent_Void, Callback_OnTitleReceiveEvent_Void, Callback_OnGeolocationShowEvent_Void, Callback_OnAlertEvent_Boolean, Callback_OnBeforeUnloadEvent_Boolean, Callback_OnConfirmEvent_Boolean, Callback_OnPromptEvent_Boolean, Callback_OnConsoleEvent_Boolean, Callback_OnErrorReceiveEvent_Void, Callback_OnHttpErrorReceiveEvent_Void, Callback_OnDownloadStartEvent_Void, Callback_OnRefreshAccessedHistoryEvent_Void, Type_WebAttribute_onUrlLoadIntercept_callback, Callback_Literal_Function_handler_Object_error_Void, Callback_OnRenderExitedEvent_Void, Callback_OnShowFileSelectorEvent_Boolean, Callback_Literal_Object_detail_Boolean, Type_WebAttribute_onFileSelectorShow_callback, Callback_OnResourceLoadEvent_Void, Callback_OnScaleChangeEvent_Void, Callback_OnHttpAuthRequestEvent_Boolean, Callback_OnInterceptRequestEvent_WebResourceResponse, Callback_OnPermissionRequestEvent_Void, Callback_OnScreenCaptureRequestEvent_Void, Callback_OnContextMenuShowEvent_Boolean, Callback_OnSearchResultReceiveEvent_Void, Callback_OnScrollEvent_Void, Callback_OnSslErrorEventReceiveEvent_Void, Callback_OnClientAuthenticationEvent_Void, Callback_OnWindowNewEvent_Void, Callback_OnTouchIconUrlReceivedEvent_Void, Callback_OnFaviconReceivedEvent_Void, Callback_OnPageVisibleEvent_Void, Callback_OnDataResubmittedEvent_Void, Callback_OnAudioStateChangedEvent_Void, Callback_OnFirstContentfulPaintEvent_Void, Callback_OnLoadInterceptEvent_Boolean, Callback_OnOverScrollEvent_Void, Callback_NativeEmbedDataInfo_Void, Callback_NativeEmbedTouchInfo_Void, Literal_String_plainText, Callback_Literal_String_plainText_Void, Literal_Number_surfaceHeight_surfaceWidth, Type_XComponentInterface_value, Callback_UIExtensionProxy_Void, Literal_Number_code_Want_want, Callback_Literal_Number_code_Want_want_Void } from "./../SyntheticDeclarations" import { AnimationExtender } from "./../ArkAnimationExtenderMaterialized" import { AnimateParam, UIContext, CommonMethod, DismissReason, Rectangle, BlurStyle, ShadowOptions, ShadowStyle, HoverModeAreaType, CommonConfiguration, ContentModifier, PickerTextStyle, PickerDialogButtonStyle, CustomBuilder, CommonShapeMethod, PointLightStyle, ComponentOptions, InputCounterOptions, TextDecorationOptions, ProvideOptions, AnimatableArithmetic, Context, Configuration, ExpectedFrameRateRange, FinishCallbackType, TouchTestStrategy, MotionPathOptions, sharedTransitionOptions, GeometryTransitionOptions, TransitionHierarchyStrategy, TranslateOptions, ScaleOptions, AlignRuleOption, LocalizedHorizontalAlignParam, LocalizedVerticalAlignParam, LocalizedAlignRuleOptions, ChainStyle, RotateOptions, TransitionOptions, TransitionEdge, TransitionEffects, DrawContext, PreviewParams, ItemDragInfo, EffectType, PreDragStatus, DragItemInfo, EventTarget, SourceType, SourceTool, RepeatMode, BlurStyleActivePolicy, ThemeColorMode, AdaptiveColor, ModalTransition, BackgroundBlurStyleOptions, BlurStyleOptions, ForegroundBlurStyleOptions, BlurOptions, BackgroundEffectOptions, ForegroundEffectOptions, ShadowType, MultiShadowOptions, SafeAreaType, SafeAreaEdge, LayoutSafeAreaType, LayoutSafeAreaEdge, SheetSize, BorderImageOption, LinearGradient_common, TouchObject, HistoricalPoint, DragBehavior, Summary, UniformDataType, DragResult, BlendMode, BlendApplyType, IntentionCode, BindOptions, DismissContentCoverAction, ContentCoverOptions, SheetTitleOptions, SheetType, SheetMode, ScrollSizeMode, SheetKeyboardAvoidMode, SheetDismiss, DismissSheetAction, SpringBackAction, SheetOptions, StateStyles, PopupMessageOptions, DismissPopupAction, PopupOptions, CustomPopupOptions, MenuPreviewMode, ContextMenuAnimationOptions, AnimationRange, ContextMenuOptions, MenuOptions, TouchTestInfo, RectResult, TouchResult, PixelStretchEffectOptions, ClickEffect, FadingEdgeOptions, NestedScrollOptions, MenuElement, SymbolGlyphModifier, OutlineStyle, DragPreviewMode, MenuPolicy, ImageModifier, DragPreviewOptions, DragInteractionOptions, InvertOptions, CircleShape, EllipseShape, PathShape, RectShape, PixelRoundPolicy, VisualEffect, Filter, AccessibilityCallback, MotionBlurOptions, BackgroundBrightnessOptions, GestureRecognizerJudgeBeginCallback, ShouldBuiltInRecognizerParallelWithCallback, SizeChangeCallback, TransitionFinishCallback, LinearGradientBlurOptions, ComponentContent, OverlayOptions, Blender, VisibleAreaChangeCallback, CommonAttribute, CommonInterface, OverlayOffset, FractionStop, MotionBlurAnchor, LayoutBorderInfo, LayoutInfo, LayoutChild, GeometryInfo, SizeResult, Layoutable, Measurable, MeasureResult, NavDestinationInfo, NavigationInfo, RouterPageInfo, Theme, CaretOffset, ContentClipMode, ScrollableCommonMethod, EdgeEffectOptions, ScrollResult, OnWillScrollCallback, OnMoveHandler, LightSource, KeyframeAnimateParam, KeyframeState, Callback, VisibleAreaEventOptions, HoverCallback, UIGestureEvent, SelectionOptions, KeyboardAvoidMode } from "./../ArkCommonInterfaces" -import { PointerStyle, Callback_RangeUpdate } from "./../ArkArkui-customInterfaces" +import { PointerStyle, LazyNotificationType, Callback_RangeUpdate } from "./../ArkArkui-customInterfaces" import { UnifiedData } from "./../ArkUnifiedDataMaterialized" import { LazyForEachOps } from "./../ArkLazyForEachOpsMaterialized" import { DrawingCanvas } from "./../ArkDrawingCanvasMaterialized" @@ -7820,6 +7820,20 @@ export class TypeChecker { static isLazyForEachOps(value: object|string|number|undefined|null|boolean): boolean { throw new Error("Can not discriminate value typeof LazyForEachOps") } + static isLazyNotificationType(value: object|string|number|undefined|null|boolean): boolean { + if (((value) === (LazyNotificationType.START_CHANGE_POSITION))) { + return true + } + else if (((value) === (LazyNotificationType.END_CHANGE_POSITION))) { + return true + } + else if (((value) === (LazyNotificationType.START_AND_END_CHANGE_POSITION))) { + return true + } + else { + throw new Error("Can not discriminate value typeof LazyNotificationType") + } + } static isLeadingMarginPlaceholder(value: object|string|number|undefined|null|boolean, duplicated_pixelMap: boolean, duplicated_size: boolean): boolean { if ((!duplicated_pixelMap) && (value?.hasOwnProperty("pixelMap"))) { return true diff --git a/arkoala-arkts/arkui/types/index-full.d.ts b/arkoala-arkts/arkui/types/index-full.d.ts index 143cb3b64..31c5ee212 100644 --- a/arkoala-arkts/arkui/types/index-full.d.ts +++ b/arkoala-arkts/arkui/types/index-full.d.ts @@ -247,11 +247,17 @@ declare class UnifiedData { getTypes(): string[]; } declare type Callback_RangeUpdate = ((index: number, mark: number|bigint, end: number) => void); +declare enum LazyNotificationType { + START_CHANGE_POSITION = 0, + END_CHANGE_POSITION = 1, + START_AND_END_CHANGE_POSITION = 2, +} declare class LazyForEachOps { static NeedMoreElements(node: number|bigint, mark: number|bigint, direction: number): number|bigint; static OnRangeUpdate(node: number|bigint, totalCount: number, updater: Callback_RangeUpdate): void; static SetCurrentIndex(node: number|bigint, index: number): void; static Prepare(node: number|bigint): void; + static NotifyChange(node: number|bigint, changeIdx: number, count: number, notificationType: number): void; } declare class DrawingCanvas { constructor(pixelmap: PixelMap); diff --git a/arkoala/framework/native/src/generated/Serializers.h b/arkoala/framework/native/src/generated/Serializers.h index 3bdacecf7..fecd3035f 100644 --- a/arkoala/framework/native/src/generated/Serializers.h +++ b/arkoala/framework/native/src/generated/Serializers.h @@ -48304,6 +48304,35 @@ inline Ark_RuntimeType runtimeType(const Opt_Literal_Want_want& value) return (value.tag != INTEROP_TAG_UNDEFINED) ? (INTEROP_RUNTIME_OBJECT) : (INTEROP_RUNTIME_UNDEFINED); } template <> +inline Ark_RuntimeType runtimeType(const Ark_LazyNotificationType& value) +{ + return INTEROP_RUNTIME_NUMBER; +} +template <> +inline void WriteToString(std::string* result, const Ark_LazyNotificationType value) { + result->append("Ark_LazyNotificationType("); + WriteToString(result, (Ark_Int32) value); + result->append(")"); +} +template <> +inline void WriteToString(std::string* result, const Opt_LazyNotificationType* value) { + result->append("{.tag="); + result->append(tagNameExact((Ark_Tag)(value->tag))); + result->append(", .value="); + if (value->tag != INTEROP_TAG_UNDEFINED) { + WriteToString(result, value->value); + } else { + Ark_Undefined undefined = { 0 }; + WriteToString(result, undefined); + } + result->append("}"); +} +template <> +inline Ark_RuntimeType runtimeType(const Opt_LazyNotificationType& value) +{ + return (value.tag != INTEROP_TAG_UNDEFINED) ? (INTEROP_RUNTIME_OBJECT) : (INTEROP_RUNTIME_UNDEFINED); +} +template <> inline Ark_RuntimeType runtimeType(const Ark_NativePointer& value) { return INTEROP_RUNTIME_OBJECT; diff --git a/arkoala/framework/native/src/generated/arkoala_api_generated.h b/arkoala/framework/native/src/generated/arkoala_api_generated.h index 93b9c98a1..40a9aad07 100644 --- a/arkoala/framework/native/src/generated/arkoala_api_generated.h +++ b/arkoala/framework/native/src/generated/arkoala_api_generated.h @@ -5128,6 +5128,15 @@ typedef struct Opt_AnimationStatus { Ark_Tag tag; Ark_AnimationStatus value; } Opt_AnimationStatus; +typedef enum Ark_LazyNotificationType { + ARK_LAZY_NOTIFICATION_TYPE_START_CHANGE_POSITION = 0, + ARK_LAZY_NOTIFICATION_TYPE_END_CHANGE_POSITION = 1, + ARK_LAZY_NOTIFICATION_TYPE_START_AND_END_CHANGE_POSITION = 2, +} Ark_LazyNotificationType; +typedef struct Opt_LazyNotificationType { + Ark_Tag tag; + Ark_LazyNotificationType value; +} Opt_LazyNotificationType; typedef struct Opt_Int32 { Ark_Tag tag; Ark_Int32 value; @@ -18350,6 +18359,10 @@ typedef struct GENERATED_ArkUILazyForEachOpsAccessor { void (*SetCurrentIndex)(Ark_NativePointer node, Ark_Int32 index); void (*Prepare)(Ark_NativePointer node); + void (*NotifyChange)(Ark_NativePointer node, + Ark_Int32 changeIdx, + Ark_Int32 count, + Ark_Int32 notificationType); } GENERATED_ArkUILazyForEachOpsAccessor; typedef struct DrawingCanvasPeer DrawingCanvasPeer; diff --git a/arkoala/framework/native/src/generated/bridge_generated.cc b/arkoala/framework/native/src/generated/bridge_generated.cc index c77d66a86..34bdfb950 100644 --- a/arkoala/framework/native/src/generated/bridge_generated.cc +++ b/arkoala/framework/native/src/generated/bridge_generated.cc @@ -18531,6 +18531,11 @@ void impl_LazyForEachOps_Prepare(Ark_NativePointer node) { GetAccessors()->getLazyForEachOpsAccessor()->Prepare(node); } KOALA_INTEROP_V1(LazyForEachOps_Prepare, Ark_NativePointer) + +void impl_LazyForEachOps_NotifyChange(Ark_NativePointer node, Ark_Int32 changeIdx, Ark_Int32 count, Ark_Int32 notificationType) { + GetAccessors()->getLazyForEachOpsAccessor()->NotifyChange(node, changeIdx, count, notificationType); +} +KOALA_INTEROP_V4(LazyForEachOps_NotifyChange, Ark_NativePointer, Ark_Int32, Ark_Int32, Ark_Int32) Ark_NativePointer impl_DrawingCanvas_ctor(uint8_t* thisArray, int32_t thisLength) { Deserializer thisDeserializer(thisArray, thisLength); diff --git a/arkoala/framework/native/src/generated/dummy_impl.cc b/arkoala/framework/native/src/generated/dummy_impl.cc index 8780d02b7..1076fe82b 100644 --- a/arkoala/framework/native/src/generated/dummy_impl.cc +++ b/arkoala/framework/native/src/generated/dummy_impl.cc @@ -19985,6 +19985,24 @@ namespace OHOS::Ace::NG::GeneratedModifier { out.append(") \n"); appendGroupedLog(1, out); } + void NotifyChangeImpl(Ark_NativePointer node, + Ark_Int32 changeIdx, + Ark_Int32 count, + Ark_Int32 notificationType) + { + if (!needGroupedLog(1)) + return; + string out("NotifyChange("); + WriteToString(&out, node); + out.append(", "); + WriteToString(&out, changeIdx); + out.append(", "); + WriteToString(&out, count); + out.append(", "); + WriteToString(&out, notificationType); + out.append(") \n"); + appendGroupedLog(1, out); + } } // LazyForEachOpsAccessor namespace DrawingCanvasAccessor { void DestroyPeerImpl(DrawingCanvasPeer* peer) @@ -31131,6 +31149,7 @@ namespace OHOS::Ace::NG::GeneratedModifier { LazyForEachOpsAccessor::OnRangeUpdateImpl, LazyForEachOpsAccessor::SetCurrentIndexImpl, LazyForEachOpsAccessor::PrepareImpl, + LazyForEachOpsAccessor::NotifyChangeImpl, }; return &LazyForEachOpsAccessorImpl; } diff --git a/arkoala/framework/native/src/generated/real_impl.cc b/arkoala/framework/native/src/generated/real_impl.cc index 6ef6151a7..d7fd945da 100644 --- a/arkoala/framework/native/src/generated/real_impl.cc +++ b/arkoala/framework/native/src/generated/real_impl.cc @@ -10287,6 +10287,17 @@ namespace OHOS::Ace::NG::GeneratedModifier { //auto convValue = Converter::OptConvert(node); // for enums //undefinedModelNG::SetPrepare(frameNode, convValue); } + void NotifyChangeImpl(Ark_NativePointer node, + Ark_Int32 changeIdx, + Ark_Int32 count, + Ark_Int32 notificationType) + { + auto frameNode = reinterpret_cast(node); + CHECK_NULL_VOID(frameNode); + //auto convValue = Converter::Convert(node); + //auto convValue = Converter::OptConvert(node); // for enums + //undefinedModelNG::SetNotifyChange(frameNode, convValue); + } } // LazyForEachOpsAccessor namespace DrawingCanvasAccessor { void DestroyPeerImpl(DrawingCanvasPeer* peer) @@ -15275,6 +15286,7 @@ namespace OHOS::Ace::NG::GeneratedModifier { LazyForEachOpsAccessor::OnRangeUpdateImpl, LazyForEachOpsAccessor::SetCurrentIndexImpl, LazyForEachOpsAccessor::PrepareImpl, + LazyForEachOpsAccessor::NotifyChangeImpl, }; return &LazyForEachOpsAccessorImpl; } diff --git a/arkoala/framework/src/generated/EnumsImpl.ts b/arkoala/framework/src/generated/EnumsImpl.ts index 8bc2f8e53..e20a617d7 100644 --- a/arkoala/framework/src/generated/EnumsImpl.ts +++ b/arkoala/framework/src/generated/EnumsImpl.ts @@ -45,6 +45,11 @@ export enum PointerStyle { LOADING = 42, RUNNING = 43 } +export enum LazyNotificationType { + START_CHANGE_POSITION = 0, + END_CHANGE_POSITION = 1, + START_AND_END_CHANGE_POSITION = 2 +} export enum RectWidthStyle { TIGHT = 0, MAX = 1 -- Gitee From 5cbd1bdf7a0bbd65552945c1bdb87b7ce1cba8b3 Mon Sep 17 00:00:00 2001 From: Tianer Zhou Date: Mon, 27 Jan 2025 16:52:48 +0800 Subject: [PATCH 4/4] remove local script Signed-off-by: Tianer Zhou --- build.sh | 8 -------- 1 file changed, 8 deletions(-) delete mode 100755 build.sh diff --git a/build.sh b/build.sh deleted file mode 100755 index ab1d92395..000000000 --- a/build.sh +++ /dev/null @@ -1,8 +0,0 @@ - -#!/bin/bash -cd arkoala-arkts -npm run --prefix application clean -npm run arkoala:har-arm32 -npm run har-arm32 --prefix shopping -cd application -npm run launch \ No newline at end of file -- Gitee