diff --git a/frameworks/kits/extension/include/js_inputmethod_extension.h b/frameworks/kits/extension/include/js_inputmethod_extension.h index 9f8b41c13a3d192a3d54e1ec0e6d739d79246a3d..160969bfc2e24c62eb1d2d34f9d336bab381fdd1 100644 --- a/frameworks/kits/extension/include/js_inputmethod_extension.h +++ b/frameworks/kits/extension/include/js_inputmethod_extension.h @@ -146,6 +146,8 @@ private: void ListenWindowManager(); + void InitDisplayCache(); + JsRuntime &jsRuntime_; std::unique_ptr jsObj_; std::shared_ptr shellContextRef_ = nullptr; diff --git a/frameworks/kits/extension/src/js_inputmethod_extension.cpp b/frameworks/kits/extension/src/js_inputmethod_extension.cpp index df464dd003eaaab57d72c267e4c8699e49011c65..ff270e7a86a96ebfef39df1a63f592372bc86d77 100644 --- a/frameworks/kits/extension/src/js_inputmethod_extension.cpp +++ b/frameworks/kits/extension/src/js_inputmethod_extension.cpp @@ -136,6 +136,7 @@ void JsInputMethodExtension::Init(const std::shared_ptr &rec } BindContext(env, obj); handler_ = handler; + InitDisplayCache(); ListenWindowManager(); IMSA_HILOGI("JsInputMethodExtension end."); } @@ -287,10 +288,21 @@ void JsInputMethodExtension::OnStart(const AAFwk::Want &want) TaskManager::GetInstance().PostTask(std::make_shared()); IMSA_HILOGI("ime bind imf"); FinishAsync("OnStart", static_cast(TraceTaskId::ONSTART_EXTENSION)); - TaskManager::GetInstance().Complete(task->GetSeqId()); } +void JsInputMethodExtension::InitDisplayCache() +{ + auto foldStatus = Rosen::DisplayManager::GetInstance().GetFoldStatus(); + auto displayPtr = Rosen::DisplayManager::GetInstance().GetDefaultDisplaySync(); + if (displayPtr == nullptr) { + IMSA_HILOGE("displayPtr is null"); + return; + } + cacheDisplay_.SetCacheDisplay( + displayPtr->GetWidth(), displayPtr->GetHeight(), displayPtr->GetRotation(), foldStatus); +} + void JsInputMethodExtension::OnStop() { InputMethodExtension::OnStop(); @@ -431,24 +443,22 @@ void JsInputMethodExtension::CheckNeedAdjustKeyboard(Rosen::DisplayId displayId) if (displayId != Rosen::DisplayManager::GetInstance().GetDefaultDisplayId()) { return; } - auto displayPtr = Rosen::DisplayManager::GetInstance().GetPrimaryDisplaySync(); + auto foldStatus = Rosen::DisplayManager::GetInstance().GetFoldStatus(); + auto displayPtr = Rosen::DisplayManager::GetInstance().GetDefaultDisplaySync(); if (displayPtr == nullptr) { return; } - auto foldStatus = Rosen::DisplayManager::GetInstance().GetFoldStatus(); IMSA_HILOGD("display width: %{public}d, height: %{public}d, rotation: %{public}d, foldStatus: %{public}d", displayPtr->GetWidth(), displayPtr->GetHeight(), displayPtr->GetRotation(), foldStatus); - if (cacheDisplay_.IsEmpty()) { - TaskManager::GetInstance().PostTask(std::make_shared()); - } else { + if (!cacheDisplay_.IsEmpty()) { if ((cacheDisplay_.displayWidth != displayPtr->GetWidth() || cacheDisplay_.displayHeight != displayPtr->GetHeight()) && cacheDisplay_.displayFoldStatus == foldStatus && cacheDisplay_.displayRotation == displayPtr->GetRotation()) { - TaskManager::GetInstance().PostTask(std::make_shared()); + InputMethodAbility::GetInstance()->AdjustKeyboard(); } } cacheDisplay_.SetCacheDisplay( diff --git a/frameworks/native/inputmethod_ability/include/tasks/task_imsa.h b/frameworks/native/inputmethod_ability/include/tasks/task_imsa.h index 89407d87a9688f149c4216d2613c730877cb190b..9a35612ad44d4c5c7901c6ba6ceb554806cbb430 100644 --- a/frameworks/native/inputmethod_ability/include/tasks/task_imsa.h +++ b/frameworks/native/inputmethod_ability/include/tasks/task_imsa.h @@ -184,18 +184,6 @@ public: } ~TaskImsaSetCoreAndAgent() = default; }; -class TaskImsaAdjustKeyboard : public Task { -public: - TaskImsaAdjustKeyboard() : Task(TASK_TYPE_IMSA_ADJUST_KEYBOARD) - { - auto func = []() { - InputMethodAbility::GetInstance()->AdjustKeyboard(); - }; - actions_.emplace_back(std::make_unique(func)); - } - ~TaskImsaAdjustKeyboard() = default; -}; - } // namespace MiscServices } // namespace OHOS diff --git a/frameworks/native/inputmethod_ability/src/input_method_ability.cpp b/frameworks/native/inputmethod_ability/src/input_method_ability.cpp index 5223766d1d85635f7818f780ed9ea652ad0e020b..85fd608d3c5469feba502c8d831511e808eaf8c1 100644 --- a/frameworks/native/inputmethod_ability/src/input_method_ability.cpp +++ b/frameworks/native/inputmethod_ability/src/input_method_ability.cpp @@ -916,7 +916,7 @@ int32_t InputMethodAbility::OnConnectSystemCmd(const sptr &channe auto panel = GetSoftKeyboardPanel(); if (panel != nullptr) { auto flag = panel->GetPanelFlag(); - if (panel->IsShowing() && flag != FLG_CANDIDATE_COLUMN) { + if (flag != FLG_CANDIDATE_COLUMN) { auto keyboardSize = panel->GetKeyboardSize(); SysPanelStatus sysPanelStatus = { inputType_, flag, keyboardSize.width, keyboardSize.height }; NotifyPanelStatus(panel->GetPanelType(), sysPanelStatus); @@ -1086,11 +1086,6 @@ int32_t InputMethodAbility::NotifyPanelStatus(PanelType panelType, SysPanelStatu if (panelType != PanelType::SOFT_KEYBOARD) { return ErrorCode::NO_ERROR; } - // If it is not binding, do not need to notify the panel - auto channel = GetInputDataChannelProxy(); - if (channel == nullptr) { - return ErrorCode::NO_ERROR; - } sysPanelStatus.inputType = inputType_; auto systemChannel = GetSystemCmdChannelProxy(); if (systemChannel == nullptr) {