diff --git a/services/src/ime_info_inquirer.cpp b/services/src/ime_info_inquirer.cpp index e2ba3a6281fdbfe088230b03103cb6b1d27a1095..8248168655c4b9aaafdf9e6fe07f69e0fd3c1972 100644 --- a/services/src/ime_info_inquirer.cpp +++ b/services/src/ime_info_inquirer.cpp @@ -703,7 +703,6 @@ std::shared_ptr ImeInfoInquirer::GetCurrentSubtype(int32_t userId) return std::make_shared(*iter); } IMSA_HILOGW("subtype %{public}s not found.", currentIme->subName.c_str()); - ImeCfgManager::GetInstance().ModifyImeCfg({ userId, currentIme->imeId, it->subProps[0].id, false }); return std::make_shared(it->subProps[0]); } @@ -750,16 +749,10 @@ std::shared_ptr ImeInfoInquirer::GetImeToStart(int32_t userId) IMSA_HILOGD("userId: %{public}d, currentIme: %{public}s.", userId, currentImeCfg->imeId.c_str()); if (currentImeCfg->imeId.empty() || !IsImeInstalled(userId, currentImeCfg->bundleName, currentImeCfg->extName)) { auto newIme = GetDefaultIme(); - auto info = GetDefaultImeInfo(userId); - if (info == nullptr) { - IMSA_HILOGW("failed to GetDefaultImeInfo"); - newIme.subName = ""; - } else { - newIme.subName = info->subProp.id; - } + newIme.subName = ""; currentImeCfg->imeId.empty() - ? ImeCfgManager::GetInstance().AddImeCfg({ userId, newIme.imeId, newIme.subName, false }) - : ImeCfgManager::GetInstance().ModifyImeCfg({ userId, newIme.imeId, newIme.subName, false}); + ? ImeCfgManager::GetInstance().AddImeCfg({ userId, newIme.imeId, "", false }) + : ImeCfgManager::GetInstance().ModifyImeCfg({ userId, newIme.imeId, "", false}); return std::make_shared(newIme); } return currentImeCfg; diff --git a/services/src/input_method_system_ability.cpp b/services/src/input_method_system_ability.cpp index f67d34ef8aa8955e116a1c762eba964657c35f5a..1191d2c4f3693eb76ae9d76de34c63719a856784 100644 --- a/services/src/input_method_system_ability.cpp +++ b/services/src/input_method_system_ability.cpp @@ -1019,9 +1019,9 @@ int32_t InputMethodSystemAbility::OnSwitchInputMethod(int32_t userId, const Swit { InputMethodSyncTrace tracer("InputMethodSystemAbility_OnSwitchInputMethod"); std::string targetImeName = info->prop.name + "/" + info->prop.id; - ImeCfgManager::GetInstance().ModifyImeCfg({ userId, targetImeName, info->subProp.id, true }); + ImeCfgManager::GetInstance().ModifyImeCfg({ userId, targetImeName, switchInfo.subName, true }); auto targetIme = std::make_shared(ImeNativeCfg{ - targetImeName, info->prop.name, switchInfo.subName.empty() ? "" : info->subProp.id, info->prop.id }); + targetImeName, info->prop.name, switchInfo.subName, info->prop.id }); ret = session->StartIme(targetIme); if (ret != ErrorCode::NO_ERROR) { InputMethodSysEvent::GetInstance().InputmethodFaultReporter( diff --git a/services/src/peruser_session.cpp b/services/src/peruser_session.cpp index 0e01d5bfebbd8c4cd785a4b7eaa2caacc70b9a52..1d9795c1f330242d3bff0555fc6a5e9c584de1f1 100644 --- a/services/src/peruser_session.cpp +++ b/services/src/peruser_session.cpp @@ -55,6 +55,7 @@ constexpr uint32_t CHECK_IME_RUNNING_RETRY_TIMES = 10; constexpr int32_t MAX_RESTART_NUM = 3; constexpr int32_t IME_RESET_TIME_OUT = 3; constexpr int32_t MAX_RESTART_TASKS = 2; +constexpr const char *UNDEFINED = "undefined"; PerUserSession::PerUserSession(int userId) : userId_(userId) { } PerUserSession::PerUserSession(int32_t userId, const std::shared_ptr &eventHandler) @@ -1103,7 +1104,11 @@ int32_t PerUserSession::StartCurrentIme(bool isStopCurrentIme) IMSA_HILOGD("currentImeInfo is nullptr!"); return ErrorCode::NO_ERROR; } - + if (imeToStart->subName.empty()) { + IMSA_HILOGW("undefined subtype"); + currentImeInfo->subProp.id = UNDEFINED; + currentImeInfo->subProp.name = UNDEFINED; + } NotifyImeChangeToClients(currentImeInfo->prop, currentImeInfo->subProp); ret = SwitchSubtypeWithoutStartIme(currentImeInfo->subProp); if (ret != ErrorCode::NO_ERROR) {