From 089c72047e22903e38e9368f304f1d89f3a74d48 Mon Sep 17 00:00:00 2001 From: zhouyongfei Date: Wed, 16 Feb 2022 12:06:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=87=E6=8D=A2=E5=A4=9A=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E5=8F=AF=E4=BB=A5=E5=88=87=E6=8D=A2=E5=AF=B9?= =?UTF-8?q?=E5=BA=94=E7=9A=84=E9=BB=98=E8=AE=A4=E8=BE=93=E5=85=A5=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhouyongfei --- etc/para/include/para_handle.h | 8 ++++--- etc/para/src/para_handle.cpp | 24 +++++++++++++++----- services/src/input_method_system_ability.cpp | 15 ++++++------ 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/etc/para/include/para_handle.h b/etc/para/include/para_handle.h index 8b58009..b285c21 100644 --- a/etc/para/include/para_handle.h +++ b/etc/para/include/para_handle.h @@ -22,11 +22,13 @@ namespace OHOS { public: ParaHandle() = default; virtual ~ParaHandle() = default; - static bool SetDefaultIme(const std::string &imeName); - static std::string GetDefaultIme(); + static bool SetDefaultIme(int32_t userId, const std::string &imeName); + static std::string GetDefaultIme(int32_t userId); private: - static const char *DEFAULT_IME; + static const char *DEFAULT_IME_KEY; + static const char *DEFAULT_IME_NAME; static constexpr int CONFIG_LEN = 128; + static const int32_t main_userId = 100; }; } } diff --git a/etc/para/src/para_handle.cpp b/etc/para/src/para_handle.cpp index 0aeff9c..962db0f 100644 --- a/etc/para/src/para_handle.cpp +++ b/etc/para/src/para_handle.cpp @@ -17,20 +17,32 @@ namespace OHOS { namespace MiscServices { - const char *ParaHandle::DEFAULT_IME = "persist.sys.default_ime"; - bool ParaHandle::SetDefaultIme(const std::string &imeName) + const char *ParaHandle::DEFAULT_IME_KEY = "persist.sys.default_ime"; + const char *ParaHandle::DEFAULT_IME_NAME = "com.example.kikakeyboard/com.example.kikakeyboard.ServiceExtAbility"; + bool ParaHandle::SetDefaultIme(int32_t userId, const std::string &imeName) { - return SetParameter(DEFAULT_IME, imeName.data()) == 0; + if (userId != main_userId) { + return SetParameter(DEFAULT_IME_KEY + userId, imeName.data()) == 0; + } else { + return SetParameter(DEFAULT_IME_KEY, imeName.data()) == 0; + } } - std::string ParaHandle::GetDefaultIme() + std::string ParaHandle::GetDefaultIme(int32_t userId) { char value[CONFIG_LEN]; - int code = GetParameter(DEFAULT_IME, "", value, CONFIG_LEN); + int code = 0; + if (userId != main_userId) { + code = GetParameter(DEFAULT_IME_KEY + userId, "", value, CONFIG_LEN); + } else { + code = GetParameter(DEFAULT_IME_KEY, "", value, CONFIG_LEN); + } if (code > 0) { return value; } - return ""; + + SetDefaultIme(userId, DEFAULT_IME_NAME); + return DEFAULT_IME_NAME; } } } diff --git a/services/src/input_method_system_ability.cpp b/services/src/input_method_system_ability.cpp index 8615724..c593627 100644 --- a/services/src/input_method_system_ability.cpp +++ b/services/src/input_method_system_ability.cpp @@ -134,7 +134,7 @@ namespace MiscServices { } IMSA_HILOGI("Publish ErrorCode::NO_ERROR."); state_ = ServiceRunningState::STATE_RUNNING; - std::string defaultIme = ParaHandle::GetDefaultIme(); + std::string defaultIme = ParaHandle::GetDefaultIme(userId_); StartInputService(defaultIme); return ErrorCode::NO_ERROR; } @@ -547,6 +547,9 @@ namespace MiscServices { IMSA_HILOGE("Aborted! %s\n", ErrorCode::ToString(ErrorCode::ERROR_BAD_PARAMETERS)); return ErrorCode::ERROR_BAD_PARAMETERS; } + + std::string defaultIme = ParaHandle::GetDefaultIme(userId_); + StopInputService(defaultIme); int32_t userId = msg->msgContent_->ReadInt32(); userId_ = userId; IMSA_HILOGI("InputMethodSystemAbility::OnUserStarted userId = %{public}u", userId); @@ -563,10 +566,8 @@ namespace MiscServices { userSettings.insert(std::pair(userId, setting)); userSessions.insert(std::pair(userId, session)); - std::string defaultIme = ParaHandle::GetDefaultIme(); + defaultIme = ParaHandle::GetDefaultIme(userId_); StartInputService(defaultIme); - - IMSA_HILOGI("InputMethodSystemAbility::OnUserStarted End...[%d]\n", userId); return ErrorCode::NO_ERROR; } @@ -855,7 +856,7 @@ namespace MiscServices { IMSA_HILOGI("InputMethodSystemAbility::OnDisplayOptionalInputMethod has no ime"); return; } - std::string defaultIme = ParaHandle::GetDefaultIme(); + std::string defaultIme = ParaHandle::GetDefaultIme(userId_); std::string params = ""; std::vector::iterator it; for (it = properties.begin(); it < properties.end(); ++it) { @@ -894,11 +895,11 @@ namespace MiscServices { [this](int32_t id, const std::string& event, const std::string& params) { IMSA_HILOGI("Dialog callback: %{public}s, %{public}s", event.c_str(), params.c_str()); if (event == "EVENT_CHANGE_IME") { - std::string defaultIme = ParaHandle::GetDefaultIme(); + std::string defaultIme = ParaHandle::GetDefaultIme(userId_); if (defaultIme != params) { StopInputService(defaultIme); StartInputService(params); - ParaHandle::SetDefaultIme(params); + ParaHandle::SetDefaultIme(userId_, params); } Ace::UIServiceMgrClient::GetInstance()->CancelDialog(id); } else if (event == "EVENT_START_IME_SETTING") {