diff --git a/frameworks/kits/extension/src/js_inputmethod_extension.cpp b/frameworks/kits/extension/src/js_inputmethod_extension.cpp index f6a5b978c545adf714a066102f684194289af2e6..bfc8e19c31a58d448199dc53239ff33a10ed7ef1 100644 --- a/frameworks/kits/extension/src/js_inputmethod_extension.cpp +++ b/frameworks/kits/extension/src/js_inputmethod_extension.cpp @@ -18,6 +18,7 @@ #include "ability_handler.h" #include "ability_info.h" #include "configuration_utils.h" +#include "display_info.h" #include "global.h" #include "input_method_ability.h" #include "inputmethod_extension_ability_service_impl.h" @@ -31,6 +32,7 @@ #include "napi_common_util.h" #include "napi_common_want.h" #include "napi_remote_object.h" +#include "parameters.h" #include "tasks/task_ams.h" #include "tasks/task_imsa.h" #include "task_manager.h" @@ -40,6 +42,8 @@ namespace AbilityRuntime { namespace { constexpr size_t ARGC_ONE = 1; constexpr size_t ARGC_TWO = 2; +const std::string FOLD_SCREEN_TYPE = OHOS::system::GetParameter("const.window.foldscreen.type", "0,0,0,0"); +constexpr const char *EXTEND_FOLD_TYPE = "4"; } // namespace JsInputMethodExtension *JsInputMethodExtension::jsInputMethodExtension = nullptr; using namespace OHOS::AppExecFwk; @@ -428,6 +432,10 @@ void JsInputMethodExtension::OnDestroy(Rosen::DisplayId displayId) void JsInputMethodExtension::CheckNeedAdjustKeyboard(Rosen::DisplayId displayId) { + if (FOLD_SCREEN_TYPE.empty() || FOLD_SCREEN_TYPE[0] != *EXTEND_FOLD_TYPE) { + IMSA_HILOGD("The current device is a non-foldable device."); + return; + } auto displayPtr = Rosen::DisplayManager::GetInstance().GetDefaultDisplaySync(); if (displayPtr == nullptr) { return; @@ -437,9 +445,14 @@ void JsInputMethodExtension::CheckNeedAdjustKeyboard(Rosen::DisplayId displayId) return; } auto foldStatus = Rosen::DisplayManager::GetInstance().GetFoldStatus(); - auto width = displayPtr->GetWidth(); - auto height = displayPtr->GetHeight(); - auto rotation = displayPtr->GetRotation(); + auto displayInfo = displayPtr->GetDisplayInfo(); + if (displayInfo == nullptr) { + IMSA_HILOGE("displayInfo is nullptr"); + return; + } + auto width = displayInfo->GetWidth(); + auto height = displayInfo->GetHeight(); + auto rotation = displayInfo->GetRotation(); IMSA_HILOGD("display width: %{public}d, height: %{public}d, rotation: %{public}d, foldStatus: %{public}d", width, height, rotation, foldStatus); if (!cacheDisplay_.IsEmpty()) { diff --git a/frameworks/kits/extension_cj/src/cj_inputmethod_extension.cpp b/frameworks/kits/extension_cj/src/cj_inputmethod_extension.cpp index 7a40715cd3fc3deca57603f9b59ce91f1cfdacd4..e71b06723b25b837537b6fb50e08baf5ed590179 100644 --- a/frameworks/kits/extension_cj/src/cj_inputmethod_extension.cpp +++ b/frameworks/kits/extension_cj/src/cj_inputmethod_extension.cpp @@ -16,10 +16,12 @@ #include "cj_inputmethod_extension.h" #include "ability_handler.h" #include "configuration_utils.h" +#include "display_info.h" #include "global.h" #include "inputmethod_extension_ability_service_impl.h" #include "inputmethod_trace.h" #include "iservice_registry.h" +#include "parameters.h" #include "system_ability_definition.h" #include "task_manager.h" #include "tasks/task_ams.h" @@ -33,6 +35,8 @@ using namespace OHOS::AppExecFwk; using namespace OHOS::MiscServices; constexpr int32_t SUCCESS_CODE = 0; +const std::string FOLD_SCREEN_TYPE = OHOS::system::GetParameter("const.window.foldscreen.type", "0,0,0,0"); +constexpr const char *EXTEND_FOLD_TYPE = "4"; extern "C" __attribute__((visibility("default"))) InputMethodExtension *OHOS_ABILITY_CjInputMethodExtension() { @@ -186,6 +190,10 @@ void CjInputMethodExtension::OnDestroy(Rosen::DisplayId displayId) void CjInputMethodExtension::CheckNeedAdjustKeyboard(Rosen::DisplayId displayId) { + if (FOLD_SCREEN_TYPE.empty() || FOLD_SCREEN_TYPE[0] != *EXTEND_FOLD_TYPE) { + IMSA_HILOGD("The current device is a non-foldable device."); + return; + } auto displayPtr = Rosen::DisplayManager::GetInstance().GetDefaultDisplaySync(); if (displayPtr == nullptr) { return; @@ -195,9 +203,14 @@ void CjInputMethodExtension::CheckNeedAdjustKeyboard(Rosen::DisplayId displayId) return; } auto foldStatus = Rosen::DisplayManager::GetInstance().GetFoldStatus(); - auto width = displayPtr->GetWidth(); - auto height = displayPtr->GetHeight(); - auto rotation = displayPtr->GetRotation(); + auto displayInfo = displayPtr->GetDisplayInfo(); + if (displayInfo == nullptr) { + IMSA_HILOGE("displayInfo is nullptr"); + return; + } + auto width = displayInfo->GetWidth(); + auto height = displayInfo->GetHeight(); + auto rotation = displayInfo->GetRotation(); IMSA_HILOGD("display width: %{public}d, height: %{public}d, rotation: %{public}d, foldStatus: %{public}d", width, height, rotation, foldStatus); if (!cacheDisplay_.IsEmpty()) {