From 478913436059e96b6530aef5ec74d0e11c487ce8 Mon Sep 17 00:00:00 2001 From: ma-shaoyin Date: Thu, 12 Oct 2023 21:11:41 +0800 Subject: [PATCH] Signed-off-by: ma-shaoyin Changes to be committed: --- .../js_get_input_method_setting.cpp | 3 +- .../include/enable_ime_data_parser.h | 14 +-- .../src/enable_ime_data_parser.cpp | 90 ++++++++----------- services/include/global.h | 5 +- services/include/ime_info_inquirer.h | 2 + services/src/ime_info_inquirer.cpp | 25 +++++- services/src/input_method_system_ability.cpp | 41 +++------ .../unittest/cpp_test/mock/datashare_helper.h | 1 + test/unittest/cpp_test/mock/global.h | 5 -- .../src/enable_ime_data_parse_test.cpp | 77 +--------------- 10 files changed, 90 insertions(+), 173 deletions(-) diff --git a/frameworks/js/napi/inputmethodclient/js_get_input_method_setting.cpp b/frameworks/js/napi/inputmethodclient/js_get_input_method_setting.cpp index 747c9f1d..4cb1ead2 100644 --- a/frameworks/js/napi/inputmethodclient/js_get_input_method_setting.cpp +++ b/frameworks/js/napi/inputmethodclient/js_get_input_method_setting.cpp @@ -30,9 +30,9 @@ namespace OHOS { namespace MiscServices { int32_t MAX_TYPE_NUM = 128; -constexpr size_t ARGC_ZERO = 0; constexpr size_t ARGC_ONE = 1; constexpr size_t ARGC_TWO = 2; +constexpr size_t ARGC_MAX = 6; thread_local napi_ref JsGetInputMethodSetting::IMSRef_ = nullptr; const std::string JsGetInputMethodSetting::IMS_CLASS_NAME = "InputMethodSetting"; const std::map PANEL_STATUS{ { InputWindowStatus::SHOW, "imeShow" }, @@ -57,6 +57,7 @@ napi_value JsGetInputMethodSetting::Init(napi_env env, napi_value exports) DECLARE_NAPI_FUNCTION("listInputMethodSubtype", ListInputMethodSubtype), DECLARE_NAPI_FUNCTION("listCurrentInputMethodSubtype", ListCurrentInputMethodSubtype), DECLARE_NAPI_FUNCTION("getInputMethods", GetInputMethods), + DECLARE_NAPI_FUNCTION("getInputMethodsSync", getInputMethodsSync), DECLARE_NAPI_FUNCTION("displayOptionalInputMethod", DisplayOptionalInputMethod), DECLARE_NAPI_FUNCTION("showOptionalInputMethods", ShowOptionalInputMethods), DECLARE_NAPI_FUNCTION("on", Subscribe), diff --git a/services/adapter/enable_ime_provider/include/enable_ime_data_parser.h b/services/adapter/enable_ime_provider/include/enable_ime_data_parser.h index dca8dcae..7a9a565d 100644 --- a/services/adapter/enable_ime_provider/include/enable_ime_data_parser.h +++ b/services/adapter/enable_ime_provider/include/enable_ime_data_parser.h @@ -25,6 +25,7 @@ #include "enable_ime_data_observer.h" #include "global.h" #include "input_method_property.h" +#include "uri.h" namespace OHOS { namespace MiscServices { @@ -48,7 +49,6 @@ public: bool CheckNeedSwitch(const std::string &key, SwitchInfo &switchInfo, const int32_t userId); // for switch target ime bool CheckNeedSwitch(const SwitchInfo &info, const int32_t userId); - int32_t GetNextSwitchInfo(SwitchInfo &switchInfo, const int32_t userId); void OnUserChanged(const int32_t userId); static constexpr const char *ENABLE_IME = "settings.inputmethod.enable_ime"; @@ -62,26 +62,26 @@ private: std::shared_ptr CreateDataShareHelper(); bool ReleaseDataShareHelper(std::shared_ptr &helper); int32_t RegisterObserver(const sptr &observer); + int32_t UnregisterObserver(const sptr &observer); int32_t GetStringValue(const std::string &key, std::string &value); - Uri GenerateTargetUri(const std::string &key); + bool ParseJsonData(const std::string &key, const std::string &valueStr, std::vector &enableVec, + const int32_t userId); + const std::string GetJsonListName(const std::string &key); bool CheckTargetEnableName( const std::string &key, const std::string &targetName, std::string &nextIme, const int32_t userId); std::shared_ptr GetDefaultIme(); - int32_t UnregisterObserver(const sptr &observer); + Uri GenerateTargetUri(const std::string &key); private: static std::mutex instanceMutex_; static sptr instance_; - std::mutex tokenMutex_; sptr remoteObj_ = nullptr; - std::mutex listMutex_; std::unordered_map> enableList_; + std::shared_ptr defaultImeInfo_{ nullptr }; - std::vector> observerList_; - int32_t currrentUserId_ = 0; }; } // namespace MiscServices diff --git a/services/adapter/enable_ime_provider/src/enable_ime_data_parser.cpp b/services/adapter/enable_ime_provider/src/enable_ime_data_parser.cpp index fac217e6..cd1713a8 100644 --- a/services/adapter/enable_ime_provider/src/enable_ime_data_parser.cpp +++ b/services/adapter/enable_ime_provider/src/enable_ime_data_parser.cpp @@ -18,22 +18,18 @@ #include "ime_info_inquirer.h" #include "iservice_registry.h" #include "nlohmann/json.hpp" -#include "datashare_errno.h" #include "system_ability_definition.h" -#include "uri.h" namespace OHOS { namespace MiscServices { using json = nlohmann::json; std::mutex EnableImeDataParser::instanceMutex_; sptr EnableImeDataParser::instance_ = nullptr; -namespace { constexpr const char *SETTING_COLUMN_KEYWORD = "KEYWORD"; constexpr const char *SETTING_COLUMN_VALUE = "VALUE"; constexpr const char *SETTING_URI_PROXY = "datashare:///com.ohos.settingsdata/entry/settingsdata/" "SETTINGSDATA?Proxy=true"; constexpr const char *SETTINGS_DATA_EXT_URI = "datashare:///com.ohos.settingsdata.DataAbility"; -} // namespace EnableImeDataParser::~EnableImeDataParser() { remoteObj_ = nullptr; @@ -163,35 +159,6 @@ bool EnableImeDataParser::ReleaseDataShareHelper(std::shared_ptr enableVec; - int32_t ret = GetEnableData(ENABLE_IME, enableVec, userId); - if (ret != ErrorCode::NO_ERROR) { - IMSA_HILOGE("Get enable list abnormal."); - return ret; - } - enableVec.insert(enableVec.begin(), GetDefaultIme()->name); - auto currentIme = ImeInfoInquirer::GetInstance().GetCurrentInputMethod(userId); - switchInfo.bundleName = GetDefaultIme()->name; - switchInfo.subName = ""; - - auto iter = std::find_if( - enableVec.begin(), enableVec.end(), [¤tIme](const std::string &ime) { return currentIme->name == ime; }); - if (iter == enableVec.end()) { - IMSA_HILOGW("Enable list is not contain current ime, get default ime."); - return ErrorCode::NO_ERROR; - } - auto nextIter = std::next(iter); - if (nextIter == enableVec.end()) { - IMSA_HILOGW("Current ime is last ime in enable list, get default ime."); - return ErrorCode::NO_ERROR; - } - switchInfo.bundleName = *nextIter; - return ErrorCode::NO_ERROR; -} - bool EnableImeDataParser::CheckNeedSwitch(const std::string &key, SwitchInfo &switchInfo, const int32_t userId) { IMSA_HILOGD("Run in, data changed."); @@ -200,6 +167,7 @@ bool EnableImeDataParser::CheckNeedSwitch(const std::string &key, SwitchInfo &sw switchInfo.subName = ""; if (key == std::string(ENABLE_IME)) { if (currentIme->name == GetDefaultIme()->name) { + GetEnableData(key, enableList_[key], userId); IMSA_HILOGD("Current ime is default, do not need switch ime."); return false; } @@ -207,6 +175,7 @@ bool EnableImeDataParser::CheckNeedSwitch(const std::string &key, SwitchInfo &sw } else if (key == std::string(ENABLE_KEYBOARD)) { if (currentIme->name != GetDefaultIme()->name || currentIme->id == GetDefaultIme()->id) { IMSA_HILOGD("Current ime is not default or id is default."); + GetEnableData(key, enableList_[key], userId); return false; } switchInfo.subName = GetDefaultIme()->id; @@ -224,7 +193,7 @@ bool EnableImeDataParser::CheckNeedSwitch(const SwitchInfo &info, const int32_t int32_t ret = 0; if (info.bundleName == GetDefaultIme()->name) { IMSA_HILOGD("Check ime keyboard."); - if (info.subName == GetDefaultIme()->id) { + if (info.subName == GetDefaultIme()->id || info.subName.empty()) { return true; } targetName = info.subName; @@ -299,44 +268,63 @@ int32_t EnableImeDataParser::GetEnableData( return ErrorCode::ERROR_ENABLE_IME; } - IMSA_HILOGD("key: %{public}s.", key.c_str()); + IMSA_HILOGD("userId: %{public}d, key: %{public}s.", userId, key.c_str()); std::string valueStr; int32_t ret = GetStringValue(key, valueStr); - if (ret != ErrorCode::NO_ERROR) { - return ret; + if (ret != ErrorCode::NO_ERROR || valueStr.empty()) { + IMSA_HILOGW("Get value failed, or valueStr is empty"); + return ErrorCode::ERROR_ENABLE_IME; } + if (!ParseJsonData(key, valueStr, enableVec, userId)) { + IMSA_HILOGE("valueStr is empty"); + return ErrorCode::ERROR_ENABLE_IME; + } + return ErrorCode::NO_ERROR; +} + +bool EnableImeDataParser::ParseJsonData( + const std::string &key, const std::string &valueStr, std::vector &enableVec, const int32_t userId) +{ IMSA_HILOGD("valueStr: %{public}s.", valueStr.c_str()); - if (valueStr.empty()) { - IMSA_HILOGW("valueStr is empty"); - return ErrorCode::NO_ERROR; - } - json jsonEnableData = json::parse(valueStr.c_str()); if (jsonEnableData.is_null() || jsonEnableData.is_discarded()) { IMSA_HILOGE("json parse failed."); - return ErrorCode::ERROR_ENABLE_IME; + return false; + } + std::string listName = GetJsonListName(key); + if (listName.empty()) { + IMSA_HILOGE("Get list name failed."); + return false; } - if (!jsonEnableData.contains("enableImeList") || !jsonEnableData["enableImeList"].is_object()) { - IMSA_HILOGE("enableImeList not find or abnormal"); - return ErrorCode::ERROR_ENABLE_IME; + if (!jsonEnableData.contains(listName) || !jsonEnableData[listName].is_object()) { + IMSA_HILOGE("listName not find or abnormal"); + return false; } std::string id = std::to_string(userId); - if (!jsonEnableData["enableImeList"].contains(id) || !jsonEnableData["enableImeList"][id].is_array()) { + if (!jsonEnableData[listName].contains(id) || !jsonEnableData[listName][id].is_array()) { IMSA_HILOGE("user id not find or abnormal"); - return ErrorCode::ERROR_ENABLE_IME; + return false; } - std::vector enableVecTemp; - for (const auto &bundleName : jsonEnableData["enableImeList"][id]) { + for (const auto &bundleName : jsonEnableData[listName][id]) { IMSA_HILOGD("enable ime string: %{public}s", std::string(bundleName).c_str()); enableVecTemp.push_back(bundleName); } enableVec.assign(enableVecTemp.begin(), enableVecTemp.end()); + return true; +} - return ErrorCode::NO_ERROR; +const std::string EnableImeDataParser::GetJsonListName(const std::string &key) +{ + if (key == std::string(ENABLE_IME)) { + return "enableImeList"; + } else if (key == std::string(ENABLE_KEYBOARD)) { + return "enableKeyboardList"; + } + return ""; } int32_t EnableImeDataParser::GetStringValue(const std::string &key, std::string &value) diff --git a/services/include/global.h b/services/include/global.h index 4216e1f4..bf6f8441 100644 --- a/services/include/global.h +++ b/services/include/global.h @@ -97,8 +97,9 @@ enum { ERROR_ADD_DEATH_RECIPIENT_FAILED = 23, ERROR_STATUS_SYSTEM_PERMISSION = 24, // not system application ERROR_IME = 25, - ERROR_KEYWORD_NOT_FOUND = 26, - ERROR_ENABLE_IME = 27, + ERROR_PARAMETER_CHECK_FAILED = 26, + ERROR_KEYWORD_NOT_FOUND = 27, + ERROR_ENABLE_IME = 28, }; }; // namespace ErrorCode diff --git a/services/include/ime_info_inquirer.h b/services/include/ime_info_inquirer.h index 48751770..b5632f5c 100644 --- a/services/include/ime_info_inquirer.h +++ b/services/include/ime_info_inquirer.h @@ -24,6 +24,7 @@ #include #include "bundle_mgr_proxy.h" +#include "enable_ime_data_parser.h" #include "input_method_info.h" #include "input_method_property.h" #include "input_method_status.h" @@ -69,6 +70,7 @@ public: int32_t ListInputMethodSubtype( const int32_t userId, const std::string &bundleName, std::vector &subProps); int32_t ListCurrentInputMethodSubtype(const int32_t userId, std::vector &subProps); + int32_t GetNextSwitchInfo(SwitchInfo &switchInfo, const int32_t userId, bool enableOn); private: ImeInfoInquirer() = default; diff --git a/services/src/ime_info_inquirer.cpp b/services/src/ime_info_inquirer.cpp index 82a3e44a..2c67d3ed 100644 --- a/services/src/ime_info_inquirer.cpp +++ b/services/src/ime_info_inquirer.cpp @@ -20,7 +20,6 @@ #include "application_info.h" #include "bundle_mgr_client_impl.h" -#include "enable_ime_data_parser.h" #include "global.h" #include "if_system_ability_manager.h" #include "ime_cfg_manager.h" @@ -351,6 +350,30 @@ int32_t ImeInfoInquirer::ListDisabledInputMethod(const int32_t userId, std::vect return ErrorCode::NO_ERROR; } +int32_t ImeInfoInquirer::GetNextSwitchInfo(SwitchInfo &switchInfo, const int32_t userId, bool enableOn) +{ + std::vector props = {}; + switchInfo.bundleName = ImeInfoInquirer::GetInstance().GetDefaultImeInfo(userId)->prop.name; + switchInfo.subName = ""; + auto ret = ListEnabledInputMethod(userId, props, enableOn); + if (ret != ErrorCode::NO_ERROR) { + IMSA_HILOGE("userId: %{public}d ListEnabledInputMethod failed", userId); + return ret; + } + auto currentImeBundle = ImeCfgManager::GetInstance().GetCurrentImeCfg(userId)->bundleName; + auto iter = std::find_if(props.begin(), props.end(), + [¤tImeBundle](const Property &property) { return property.name == currentImeBundle; }); + if (iter == props.end()) { + IMSA_HILOGE("Can not found current ime"); + } else { + auto nextIter = std::next(iter); + if (nextIter != props.end()) { + switchInfo.bundleName = nextIter->name; + } + } + return ErrorCode::NO_ERROR; +} + int32_t ImeInfoInquirer::ListInputMethodSubtype( const int32_t userId, const std::string &bundleName, std::vector &subProps) { diff --git a/services/src/input_method_system_ability.cpp b/services/src/input_method_system_ability.cpp index eb644b91..c8aa09b6 100644 --- a/services/src/input_method_system_ability.cpp +++ b/services/src/input_method_system_ability.cpp @@ -379,9 +379,7 @@ int32_t InputMethodSystemAbility::DisplayOptionalInputMethod() int32_t InputMethodSystemAbility::SwitchInputMethod(const std::string &bundleName, const std::string &subName) { - SwitchInfo switchInfo; - switchInfo.bundleName = bundleName; - switchInfo.subName = subName; + SwitchInfo switchInfo = { std::chrono::system_clock::now(), bundleName, subName }; if (enableImeOn_ && !EnableImeDataParser::GetInstance()->CheckNeedSwitch(switchInfo, userId_)) { IMSA_HILOGW("Enable mode off or switch is not enable, stoped!"); return ErrorCode::ERROR_ENABLE_IME; @@ -587,6 +585,9 @@ int32_t InputMethodSystemAbility::OnUserStarted(const Message *msg) return ErrorCode::NO_ERROR; } IMSA_HILOGI("%{public}d switch to %{public}d.", oldUserId, userId_); + if (enableImeOn_) { + EnableImeDataParser::GetInstance()->OnUserChanged(userId_); + } auto currentIme = ImeCfgManager::GetInstance().GetCurrentImeCfg(oldUserId)->imeId; StopInputService(currentIme); // user switch, reset currentImeInfo_ = nullptr @@ -741,36 +742,14 @@ int32_t InputMethodSystemAbility::SwitchLanguage() int32_t InputMethodSystemAbility::SwitchType() { - SwitchInfo switchInfo; - if (enableImeOn_) { - int32_t ret = EnableImeDataParser::GetInstance()->GetNextSwitchInfo(switchInfo, userId_); - if (ret != ErrorCode::NO_ERROR) { - return ret; - } - switchInfo.timestamp = std::chrono::system_clock::now(); - } else { - std::vector props = {}; - auto ret = ImeInfoInquirer::GetInstance().ListInputMethod(userId_, ALL, props, false); - if (ret != ErrorCode::NO_ERROR) { - IMSA_HILOGE("ListProperty failed"); - return ret; - } - auto currentImeBundle = ImeCfgManager::GetInstance().GetCurrentImeCfg(userId_)->bundleName; - auto iter = std::find_if(props.begin(), props.end(), - [¤tImeBundle](const Property &property) { return property.name == currentImeBundle; }); - switchInfo.bundleName = ImeInfoInquirer::GetInstance().GetDefaultImeInfo(userId_)->prop.name; - if (iter == props.end()) { - IMSA_HILOGE("Can not found current ime"); - } else { - auto nextIter = std::next(iter); - if (nextIter != props.end()) { - switchInfo.bundleName = nextIter->name; - } - } - switchInfo.subName = ""; - switchInfo.timestamp = std::chrono::system_clock::now(); + SwitchInfo switchInfo = { std::chrono::system_clock::now(), "", "" }; + int32_t ret = ImeInfoInquirer::GetInstance().GetNextSwitchInfo(switchInfo, userId_, enableImeOn_); + if (ret != ErrorCode::NO_ERROR) { + IMSA_HILOGE("Get next SwitchInfo failed, stop switching ime."); + return ret; } IMSA_HILOGD("switch to: %{public}s", switchInfo.bundleName.c_str()); + switchInfo.timestamp = std::chrono::system_clock::now(); switchQueue_.Push(switchInfo); return OnSwitchInputMethod(switchInfo, false); } diff --git a/test/unittest/cpp_test/mock/datashare_helper.h b/test/unittest/cpp_test/mock/datashare_helper.h index b3ea42a0..cca219c8 100644 --- a/test/unittest/cpp_test/mock/datashare_helper.h +++ b/test/unittest/cpp_test/mock/datashare_helper.h @@ -24,6 +24,7 @@ namespace OHOS { namespace DataShare { +constexpr int32_t E_OK = 0; class DataSharePredicates { public: DataSharePredicates *EqualTo(const std::string &field, const std::string &value); diff --git a/test/unittest/cpp_test/mock/global.h b/test/unittest/cpp_test/mock/global.h index 6c9f8d18..6cf3da3e 100644 --- a/test/unittest/cpp_test/mock/global.h +++ b/test/unittest/cpp_test/mock/global.h @@ -29,7 +29,6 @@ namespace OHOS { namespace MiscServices { - using BRemoteObject = IPCObjectStub; #define LOG_INFO(fmt, args...) \ @@ -66,10 +65,6 @@ constexpr int32_t ERROR_ENABLE_IME = 27; }; // namespace ErrorCode -namespace DataShare { -constexpr int32_t E_OK = 0; -}; // namespace DataShare - constexpr HiviewDFX::HiLogLabel g_SMALL_SERVICES_LABEL = { LOG_CORE, 0xD001C00, "ImsaKit" }; #define IMSA_HILOGD(fmt, ...) \ diff --git a/test/unittest/cpp_test/src/enable_ime_data_parse_test.cpp b/test/unittest/cpp_test/src/enable_ime_data_parse_test.cpp index 4d363777..29d7ece0 100644 --- a/test/unittest/cpp_test/src/enable_ime_data_parse_test.cpp +++ b/test/unittest/cpp_test/src/enable_ime_data_parse_test.cpp @@ -121,7 +121,7 @@ HWTEST_F(EnableImeDataParseTest, testGetEnableData_002, TestSize.Level0) HWTEST_F(EnableImeDataParseTest, testGetEnableData_003, TestSize.Level0) { IMSA_HILOGI("EnableImeDataParseTest testGetEnableData_003 START"); - EnableImeDataParseTest::resultSet_->strValue_ = ""; + EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : []}}"; std::vector enableVec; int32_t ret = EnableImeDataParser::GetInstance()->GetEnableData(IME_KEY, enableVec, EnableImeDataParseTest::USER_ID); @@ -350,7 +350,7 @@ HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_012, TestSize.Level0) IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_005 START"); ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "xiaoyiIme"; ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->id = "xiaoyiImeId"; - EnableImeDataParseTest::resultSet_->strValue_ = ""; + EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : []}}"; SwitchInfo switchInfo; EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("xiaoyiIme"); EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("baiduIme"); @@ -393,79 +393,6 @@ HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_013, TestSize.Level0) } } -/** - * @tc.name: testGetNextSwitchInfo_001 - * @tc.desc: Get next enable ime info when enable list is empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: mashaoyin - */ -HWTEST_F(EnableImeDataParseTest, testGetNextSwitchInfo_001, TestSize.Level0) -{ - IMSA_HILOGI("EnableImeDataParseTest testGetNextSwitchInfo_001 START"); - SwitchInfo switchInfo; - EnableImeDataParseTest::resultSet_->strValue_ = ""; - int32_t ret = EnableImeDataParser::GetInstance()->GetNextSwitchInfo(switchInfo, USER_ID); - EXPECT_EQ(ret, ErrorCode::NO_ERROR); - EXPECT_EQ(switchInfo.bundleName, EnableImeDataParser::GetInstance()->defaultImeInfo_->name); -} - -/** - * @tc.name: testGetNextSwitchInfo_002 - * @tc.desc: Get next enable ime info when the current ime is default. - * @tc.type: FUNC - * @tc.require: - * @tc.author: mashaoyin - */ -HWTEST_F(EnableImeDataParseTest, testGetNextSwitchInfo_002, TestSize.Level0) -{ - IMSA_HILOGI("EnableImeDataParseTest testGetNextSwitchInfo_002 START"); - SwitchInfo switchInfo; - EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : [ \"xiaoyiIme\", \"baiduIme\", " - "\"sougouIme\"],\"101\" : [\"sougouIme\"]}}"; - int32_t ret = EnableImeDataParser::GetInstance()->GetNextSwitchInfo(switchInfo, USER_ID); - EXPECT_EQ(ret, ErrorCode::NO_ERROR); - EXPECT_EQ(switchInfo.bundleName, "xiaoyiIme"); -} - -/** - * @tc.name: testGetNextSwitchInfo_003 - * @tc.desc: Get next enable ime info when the current ime is the first. - * @tc.type: FUNC - * @tc.require: - * @tc.author: mashaoyin - */ -HWTEST_F(EnableImeDataParseTest, testGetNextSwitchInfo_003, TestSize.Level0) -{ - IMSA_HILOGI("EnableImeDataParseTest testGetNextSwitchInfo_003 START"); - SwitchInfo switchInfo; - ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "xiaoyiIme"; - EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : [ \"xiaoyiIme\", \"baiduIme\", " - "\"sougouIme\"],\"101\" : [\"sougouIme\"]}}"; - int32_t ret = EnableImeDataParser::GetInstance()->GetNextSwitchInfo(switchInfo, USER_ID); - EXPECT_EQ(ret, ErrorCode::NO_ERROR); - EXPECT_EQ(switchInfo.bundleName, "baiduIme"); -} - -/** - * @tc.name: testGetNextSwitchInfo_004 - * @tc.desc: Get next enable ime info when the current ime is the last. - * @tc.type: FUNC - * @tc.require: - * @tc.author: mashaoyin - */ -HWTEST_F(EnableImeDataParseTest, testGetNextSwitchInfo_004, TestSize.Level0) -{ - IMSA_HILOGI("EnableImeDataParseTest testGetNextSwitchInfo_004 START"); - SwitchInfo switchInfo; - ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "sougouIme"; - EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : [ \"xiaoyiIme\", \"baiduIme\", " - "\"sougouIme\"],\"101\" : [\"sougouIme\"]}}"; - int32_t ret = EnableImeDataParser::GetInstance()->GetNextSwitchInfo(switchInfo, USER_ID); - EXPECT_EQ(ret, ErrorCode::NO_ERROR); - EXPECT_EQ(switchInfo.bundleName, EnableImeDataParser::GetInstance()->defaultImeInfo_->name); -} - /** * @tc.name: testOnUserChanged_001 * @tc.desc: Test local enable list cache change when user changed.