From 2147b48b0d0e51259d963d850b2fea4da889e4a0 Mon Sep 17 00:00:00 2001 From: travislgd Date: Sat, 16 Aug 2025 18:00:31 +0800 Subject: [PATCH] fols status Signed-off-by: travislgd --- .../display_ani/ets/@ohos.display.ets | 65 ++++++++++++++++--- .../display_ani/include/display_ani_utils.h | 6 +- .../display_ani/src/display_ani_utils.cpp | 46 +++++++++++-- 3 files changed, 99 insertions(+), 18 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets index 7734d76a20..f650d0228d 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets +++ b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets @@ -138,10 +138,42 @@ export enum FoldStatus { FOLD_STATUS_FOLDED, - FOLD_STATUS_HALF_FOLDED + FOLD_STATUS_HALF_FOLDED, + + FOLD_STATUS_EXPANDED_WITH_SECOND_EXPANDED = 11, + + FOLD_STATUS_EXPANDED_WITH_SECOND_HALF_FOLDED = 21, + + FOLD_STATUS_FOLDED_WITH_SECOND_EXPANDED = 12, + + FOLD_STATUS_FOLDED_WITH_SECOND_HALF_FOLDED = 22, + + FOLD_STATUS_HALF_FOLDED_WITH_SECOND_EXPANDED = 13, + + FOLD_STATUS_HALF_FOLDED_WITH_SECOND_HALF_FOLDED = 23 } -enum DisplayState { +export enum ScreenShape { + + RECTANGLE = 0, + + ROUND = 1 +} + +export enum DisplaySourceMode { + + NONE = 0, + + MAIN = 1, + + MIRROR = 2, + + EXTEND = 3, + + ALONE = 4 +} + +export enum DisplayState { STATE_UNKNOWN = 0, STATE_OFF, @@ -190,10 +222,20 @@ export interface Display { yDPI: double; + screenShape?: ScreenShape; + colorSpaces: Array; hdrFormats: Array; + SourceMode?:DisplaySourceMode; + + x?: long; + + y?: long; + + supportedRefreshRates?: Array; + getCutoutInfo(callback: AsyncCallback): void; getCutoutInfo(): Promise; @@ -215,6 +257,7 @@ export class DisplayImpl implements Display { constructor() { this.colorSpaces = new Array(); this.hdrFormats = new Array(); + this.supportedRefreshRates = new Array(); } id: long; @@ -224,7 +267,6 @@ export class DisplayImpl implements Display { alive: boolean; state: DisplayState; - state_: int; refreshRate: int; @@ -241,7 +283,6 @@ export class DisplayImpl implements Display { densityDPI: double; orientation: Orientation; - orientation_: int; densityPixels: double; @@ -251,10 +292,20 @@ export class DisplayImpl implements Display { yDPI: double; + screenShape?: ScreenShape; + colorSpaces: Array; hdrFormats: Array; + sourceMode?: DisplaySourceMode; + + x?: long; + + y?: long; + + supportedRefreshRates?: Array; + displayRef: long; setDisplayRef(nativeObj : long) : void{ @@ -394,8 +445,6 @@ export native function getCurrentFoldCreaseRegionNative(foldCreaseRegion: object export function getDisplayByIdSync(displayId: long): Display { let display = new DisplayImpl(); getDisplayByIdSyncNative(display as object, displayId); - display.state = display.state_ as DisplayState; - display.orientation = display.orientation_ as Orientation; return display; } @@ -404,8 +453,6 @@ export native function getDisplayByIdSyncNative(obj: object, displayId: long): v export function getDefaultDisplaySync(): Display { let display = new DisplayImpl(); getDefaultDisplaySyncNative(display as object); - display.state = display.state_ as DisplayState; - display.orientation = display.orientation_ as Orientation; return display; } @@ -452,8 +499,6 @@ function minusDisplayArray(displayArr: Array): void { break; } let dp = displayArr[i] as DisplayImpl; - dp.state = dp.state_ as DisplayState; - dp.orientation = dp.orientation_ as Orientation; } displayArr.splice(i); } diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h index 1c4a9006b7..20d54fed94 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h @@ -37,6 +37,8 @@ static void ConvertWaterArea(WaterfallDisplayAreaRects waterfallDisplayAreaRects static void ConvertDisplayPhysicalResolution(std::vector &displayPhysicalArray, ani_object arrayObj, ani_env *env); +static ani_enum_item CreateAniEnum(ani_env* env, const char* enum_descriptor, ani_size index); + static ani_status CvtDisplay(sptr display, ani_env* env, ani_object obj); static ani_status GetStdString(ani_env *env, ani_string ani_str, std::string &result); @@ -53,10 +55,10 @@ static void CreateAniArrayDouble(ani_env* env, ani_size size, ani_array_double * static ani_status GetAniString(ani_env* env, const std::string& str, ani_string* result); -static ani_status CallAniFunctionVoid(ani_env *env, const char* ns, +static ani_status CallAniFunctionVoid(ani_env* env, const char* ns, const char* fn, const char* signature, ...); -static ani_object CreateRectObject(ani_env *env); +static ani_object CreateRectObject(ani_env* env); }; } } diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp index ba7ed9331d..58b9714b79 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp @@ -96,6 +96,19 @@ void DisplayAniUtils::ConvertDisplayPhysicalResolution(std::vectorFindEnum(enum_descriptor, &enumType); + if(ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] Failed to find enum, %{public}s", enum_descriptor); + return nullptr; + } + ani_enum_item enumItem; + env->Enum_GetEnumItemByIndex(enumType, index, &enumItem); + return enumItem; +} + ani_status DisplayAniUtils::CvtDisplay(sptr display, ani_env* env, ani_object obj) { sptr info = display->GetDisplayInfoWithCache(); @@ -111,9 +124,11 @@ ani_status DisplayAniUtils::CvtDisplay(sptr display, ani_env* env, ani_ env->Object_SetFieldByName_Ref(obj, "name", str); env->Object_SetFieldByName_Boolean(obj, "alive", info->GetAliveStatus()); if (NATIVE_TO_JS_DISPLAY_STATE_MAP.count(info->GetDisplayState()) != 0) { - env->Object_SetFieldByName_Int(obj, "state_", static_cast(info->GetDisplayState())); + env->Object_SetFieldByName_Ref(obj, "state", DisplayAniUtils::CreateAniEnum( + env, "@ohos.display.display.DisplayState", static_cast(info->GetDisplayState()))); } else { - env->Object_SetFieldByName_Int(obj, "state_", 0); + env->Object_SetFieldByName_Ref(obj, "state", DisplayAniUtils::CreateAniEnum( + env, "@ohos.display.display.DisplayState", static_cast(0))); } env->Object_SetFieldByName_Int(obj, "refreshRate", info->GetRefreshRate()); env->Object_SetFieldByName_Int(obj, "rotation", static_cast(info->GetRotation())); @@ -126,14 +141,27 @@ ani_status DisplayAniUtils::CvtDisplay(sptr display, ani_env* env, ani_ env->Object_SetFieldByName_Long(obj, "availableWidth", info->GetAvailableWidth()); env->Object_SetFieldByName_Long(obj, "availableHeight", info->GetAvailableHeight()); env->Object_SetFieldByName_Double(obj, "densityDPI", info->GetVirtualPixelRatio() * DOT_PER_INCH); - env->Object_SetFieldByName_Int(obj, "orientation_", static_cast(info->GetDisplayOrientation())); + env->Object_SetFieldByName_Ref(obj, "orientation", DisplayAniUtils::CreateAniEnum( + env, "@ohos.display.display.Orientation", static_cast(info->GetDisplayOrientation()))); env->Object_SetFieldByName_Double(obj, "densityPixels", info->GetVirtualPixelRatio()); env->Object_SetFieldByName_Double(obj, "scaledDensity", info->GetVirtualPixelRatio()); - env->Object_SetFieldByName_Double(obj, "xDPI", info->GetXDpi()); - env->Object_SetFieldByName_Double(obj, "yDPI", info->GetYDpi()); + env->Object_SetFieldByName_Ref(obj, "screenShape", DisplayAniUtils::CreateAniEnum( + env, "@ohos.display.display.ScreenShape", static_cast(info->GetScreenShape()))); + if (info->GetDisplaySourceMode() == DisplaySourceMode::MAIN || + info->GetDisplaySourceMode() == DisplaySourceMode::EXTEND) { + env->Object_SetFieldByName_Long(obj, "x", info->GetX()); + env->Object_SetFieldByName_Long(obj, "y", info->GetY()); + } else { + env->Object_SetFieldByName_Long(obj, "x", DisplayAniUtils::CreateAniUndefined(env)); + env->Object_SetFieldByName_Long(obj, "y", DisplayAniUtils::CreateAniUndefined(env)); + } + env->Object_SetFieldByName_Ref(obj, "sourceMode", DisplayAniUtils::CreateAniEnum( + env, "@ohos.display.display.DisplaySourceMode", static_cast(info->GetDisplaySourceMode()))); + env->Object_SetFieldByName_Double(obj, "xDPI", DisplayAniUtils::CreateAniUndefined(env)); + env->Object_SetFieldByName_Double(obj, "yDPI", DisplayAniUtils::CreateAniUndefined(env)); auto colorSpaces = info->GetColorSpaces(); auto hdrFormats = info->GetHdrFormats(); - TLOGI(WmsLogTag::DMS, "[ANI] colorSpaces(0) %{public}d", (int)colorSpaces.size()); + auto supportedRefreshRates = info->GetSupportedRefreshRate(); if (colorSpaces.size() != 0) { ani_array_int colorSpacesAni; CreateAniArrayInt(env, colorSpaces.size(), &colorSpacesAni, colorSpaces); @@ -144,6 +172,12 @@ ani_status DisplayAniUtils::CvtDisplay(sptr display, ani_env* env, ani_ CreateAniArrayInt(env, hdrFormats.size(), &hdrFormatsAni, hdrFormats); env->Object_SetFieldByName_Ref(obj, "hdrFormats", static_cast(hdrFormatsAni)); } + if (supportedRefreshRates.size() != 0) { + ani_array_int supportedRefreshRatesAni; + CreateAniArrayInt(env, hdrFormats.size(), &supportedRefreshRatesAni, supportedRefreshRates); + env->Object_SetFieldByName_Ref(obj, "supportedRefreshRates", + static_cast(supportedRefreshRatesAni)); + } return ANI_OK; } -- Gitee