diff --git a/services/src/input_method_system_ability.cpp b/services/src/input_method_system_ability.cpp index 2d59c93..b38c4e8 100644 --- a/services/src/input_method_system_ability.cpp +++ b/services/src/input_method_system_ability.cpp @@ -547,27 +547,30 @@ namespace MiscServices { IMSA_HILOGE("Aborted! %s\n", ErrorCode::ToString(ErrorCode::ERROR_BAD_PARAMETERS)); return ErrorCode::ERROR_BAD_PARAMETERS; } - std::string defaultIme = ParaHandle::GetDefaultIme(userId_); + std::string currentDefaultIme = ParaHandle::GetDefaultIme(userId_); int32_t userId = msg->msgContent_->ReadInt32(); userId_ = userId; IMSA_HILOGI("InputMethodSystemAbility::OnUserStarted userId = %{public}u", userId); + std::string newDefaultIme = ParaHandle::GetDefaultIme(userId_); + + if (newDefaultIme != currentDefaultIme) { + StopInputService(currentDefaultIme); + StartInputService(newDefaultIme); + } + PerUserSetting *setting = GetUserSetting(userId); if (setting != nullptr) { IMSA_HILOGE("Aborted! %s %d\n", ErrorCode::ToString(ErrorCode::ERROR_USER_ALREADY_STARTED), userId); return ErrorCode::ERROR_USER_ALREADY_STARTED; } - StopInputService(defaultIme); - setting = new PerUserSetting(userId); setting->Initialize(); PerUserSession *session = new PerUserSession(userId); userSettings.insert(std::pair(userId, setting)); userSessions.insert(std::pair(userId, session)); - defaultIme = ParaHandle::GetDefaultIme(userId_); - StartInputService(defaultIme); return ErrorCode::NO_ERROR; }