mirror of
https://gitee.com/openharmony/inputmethod_imf
synced 2024-11-23 22:59:45 +00:00
Signed-off-by: ma-shaoyin <mashaoyin1@huawei.com>
Changes to be committed:
This commit is contained in:
parent
8cdfa37ea1
commit
4789134360
@ -30,9 +30,9 @@
|
|||||||
namespace OHOS {
|
namespace OHOS {
|
||||||
namespace MiscServices {
|
namespace MiscServices {
|
||||||
int32_t MAX_TYPE_NUM = 128;
|
int32_t MAX_TYPE_NUM = 128;
|
||||||
constexpr size_t ARGC_ZERO = 0;
|
|
||||||
constexpr size_t ARGC_ONE = 1;
|
constexpr size_t ARGC_ONE = 1;
|
||||||
constexpr size_t ARGC_TWO = 2;
|
constexpr size_t ARGC_TWO = 2;
|
||||||
|
constexpr size_t ARGC_MAX = 6;
|
||||||
thread_local napi_ref JsGetInputMethodSetting::IMSRef_ = nullptr;
|
thread_local napi_ref JsGetInputMethodSetting::IMSRef_ = nullptr;
|
||||||
const std::string JsGetInputMethodSetting::IMS_CLASS_NAME = "InputMethodSetting";
|
const std::string JsGetInputMethodSetting::IMS_CLASS_NAME = "InputMethodSetting";
|
||||||
const std::map<InputWindowStatus, std::string> PANEL_STATUS{ { InputWindowStatus::SHOW, "imeShow" },
|
const std::map<InputWindowStatus, std::string> 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("listInputMethodSubtype", ListInputMethodSubtype),
|
||||||
DECLARE_NAPI_FUNCTION("listCurrentInputMethodSubtype", ListCurrentInputMethodSubtype),
|
DECLARE_NAPI_FUNCTION("listCurrentInputMethodSubtype", ListCurrentInputMethodSubtype),
|
||||||
DECLARE_NAPI_FUNCTION("getInputMethods", GetInputMethods),
|
DECLARE_NAPI_FUNCTION("getInputMethods", GetInputMethods),
|
||||||
|
DECLARE_NAPI_FUNCTION("getInputMethodsSync", getInputMethodsSync),
|
||||||
DECLARE_NAPI_FUNCTION("displayOptionalInputMethod", DisplayOptionalInputMethod),
|
DECLARE_NAPI_FUNCTION("displayOptionalInputMethod", DisplayOptionalInputMethod),
|
||||||
DECLARE_NAPI_FUNCTION("showOptionalInputMethods", ShowOptionalInputMethods),
|
DECLARE_NAPI_FUNCTION("showOptionalInputMethods", ShowOptionalInputMethods),
|
||||||
DECLARE_NAPI_FUNCTION("on", Subscribe),
|
DECLARE_NAPI_FUNCTION("on", Subscribe),
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "enable_ime_data_observer.h"
|
#include "enable_ime_data_observer.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "input_method_property.h"
|
#include "input_method_property.h"
|
||||||
|
#include "uri.h"
|
||||||
|
|
||||||
namespace OHOS {
|
namespace OHOS {
|
||||||
namespace MiscServices {
|
namespace MiscServices {
|
||||||
@ -48,7 +49,6 @@ public:
|
|||||||
bool CheckNeedSwitch(const std::string &key, SwitchInfo &switchInfo, const int32_t userId);
|
bool CheckNeedSwitch(const std::string &key, SwitchInfo &switchInfo, const int32_t userId);
|
||||||
// for switch target ime
|
// for switch target ime
|
||||||
bool CheckNeedSwitch(const SwitchInfo &info, const int32_t userId);
|
bool CheckNeedSwitch(const SwitchInfo &info, const int32_t userId);
|
||||||
int32_t GetNextSwitchInfo(SwitchInfo &switchInfo, const int32_t userId);
|
|
||||||
void OnUserChanged(const int32_t userId);
|
void OnUserChanged(const int32_t userId);
|
||||||
|
|
||||||
static constexpr const char *ENABLE_IME = "settings.inputmethod.enable_ime";
|
static constexpr const char *ENABLE_IME = "settings.inputmethod.enable_ime";
|
||||||
@ -62,26 +62,26 @@ private:
|
|||||||
std::shared_ptr<DataShare::DataShareHelper> CreateDataShareHelper();
|
std::shared_ptr<DataShare::DataShareHelper> CreateDataShareHelper();
|
||||||
bool ReleaseDataShareHelper(std::shared_ptr<DataShare::DataShareHelper> &helper);
|
bool ReleaseDataShareHelper(std::shared_ptr<DataShare::DataShareHelper> &helper);
|
||||||
int32_t RegisterObserver(const sptr<EnableImeDataObserver> &observer);
|
int32_t RegisterObserver(const sptr<EnableImeDataObserver> &observer);
|
||||||
|
int32_t UnregisterObserver(const sptr<EnableImeDataObserver> &observer);
|
||||||
int32_t GetStringValue(const std::string &key, std::string &value);
|
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<std::string> &enableVec,
|
||||||
|
const int32_t userId);
|
||||||
|
const std::string GetJsonListName(const std::string &key);
|
||||||
bool CheckTargetEnableName(
|
bool CheckTargetEnableName(
|
||||||
const std::string &key, const std::string &targetName, std::string &nextIme, const int32_t userId);
|
const std::string &key, const std::string &targetName, std::string &nextIme, const int32_t userId);
|
||||||
std::shared_ptr<Property> GetDefaultIme();
|
std::shared_ptr<Property> GetDefaultIme();
|
||||||
int32_t UnregisterObserver(const sptr<EnableImeDataObserver> &observer);
|
Uri GenerateTargetUri(const std::string &key);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static std::mutex instanceMutex_;
|
static std::mutex instanceMutex_;
|
||||||
static sptr<EnableImeDataParser> instance_;
|
static sptr<EnableImeDataParser> instance_;
|
||||||
|
|
||||||
std::mutex tokenMutex_;
|
std::mutex tokenMutex_;
|
||||||
sptr<IRemoteObject> remoteObj_ = nullptr;
|
sptr<IRemoteObject> remoteObj_ = nullptr;
|
||||||
|
|
||||||
std::mutex listMutex_;
|
std::mutex listMutex_;
|
||||||
std::unordered_map<std::string, std::vector<std::string>> enableList_;
|
std::unordered_map<std::string, std::vector<std::string>> enableList_;
|
||||||
|
|
||||||
std::shared_ptr<Property> defaultImeInfo_{ nullptr };
|
std::shared_ptr<Property> defaultImeInfo_{ nullptr };
|
||||||
|
|
||||||
std::vector<sptr<EnableImeDataObserver>> observerList_;
|
std::vector<sptr<EnableImeDataObserver>> observerList_;
|
||||||
|
|
||||||
int32_t currrentUserId_ = 0;
|
int32_t currrentUserId_ = 0;
|
||||||
};
|
};
|
||||||
} // namespace MiscServices
|
} // namespace MiscServices
|
||||||
|
@ -18,22 +18,18 @@
|
|||||||
#include "ime_info_inquirer.h"
|
#include "ime_info_inquirer.h"
|
||||||
#include "iservice_registry.h"
|
#include "iservice_registry.h"
|
||||||
#include "nlohmann/json.hpp"
|
#include "nlohmann/json.hpp"
|
||||||
#include "datashare_errno.h"
|
|
||||||
#include "system_ability_definition.h"
|
#include "system_ability_definition.h"
|
||||||
#include "uri.h"
|
|
||||||
|
|
||||||
namespace OHOS {
|
namespace OHOS {
|
||||||
namespace MiscServices {
|
namespace MiscServices {
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
std::mutex EnableImeDataParser::instanceMutex_;
|
std::mutex EnableImeDataParser::instanceMutex_;
|
||||||
sptr<EnableImeDataParser> EnableImeDataParser::instance_ = nullptr;
|
sptr<EnableImeDataParser> EnableImeDataParser::instance_ = nullptr;
|
||||||
namespace {
|
|
||||||
constexpr const char *SETTING_COLUMN_KEYWORD = "KEYWORD";
|
constexpr const char *SETTING_COLUMN_KEYWORD = "KEYWORD";
|
||||||
constexpr const char *SETTING_COLUMN_VALUE = "VALUE";
|
constexpr const char *SETTING_COLUMN_VALUE = "VALUE";
|
||||||
constexpr const char *SETTING_URI_PROXY = "datashare:///com.ohos.settingsdata/entry/settingsdata/"
|
constexpr const char *SETTING_URI_PROXY = "datashare:///com.ohos.settingsdata/entry/settingsdata/"
|
||||||
"SETTINGSDATA?Proxy=true";
|
"SETTINGSDATA?Proxy=true";
|
||||||
constexpr const char *SETTINGS_DATA_EXT_URI = "datashare:///com.ohos.settingsdata.DataAbility";
|
constexpr const char *SETTINGS_DATA_EXT_URI = "datashare:///com.ohos.settingsdata.DataAbility";
|
||||||
} // namespace
|
|
||||||
EnableImeDataParser::~EnableImeDataParser()
|
EnableImeDataParser::~EnableImeDataParser()
|
||||||
{
|
{
|
||||||
remoteObj_ = nullptr;
|
remoteObj_ = nullptr;
|
||||||
@ -163,35 +159,6 @@ bool EnableImeDataParser::ReleaseDataShareHelper(std::shared_ptr<DataShare::Data
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t EnableImeDataParser::GetNextSwitchInfo(SwitchInfo &switchInfo, const int32_t userId)
|
|
||||||
{
|
|
||||||
IMSA_HILOGD("Run in.");
|
|
||||||
std::vector<std::string> 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)
|
bool EnableImeDataParser::CheckNeedSwitch(const std::string &key, SwitchInfo &switchInfo, const int32_t userId)
|
||||||
{
|
{
|
||||||
IMSA_HILOGD("Run in, data changed.");
|
IMSA_HILOGD("Run in, data changed.");
|
||||||
@ -200,6 +167,7 @@ bool EnableImeDataParser::CheckNeedSwitch(const std::string &key, SwitchInfo &sw
|
|||||||
switchInfo.subName = "";
|
switchInfo.subName = "";
|
||||||
if (key == std::string(ENABLE_IME)) {
|
if (key == std::string(ENABLE_IME)) {
|
||||||
if (currentIme->name == GetDefaultIme()->name) {
|
if (currentIme->name == GetDefaultIme()->name) {
|
||||||
|
GetEnableData(key, enableList_[key], userId);
|
||||||
IMSA_HILOGD("Current ime is default, do not need switch ime.");
|
IMSA_HILOGD("Current ime is default, do not need switch ime.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -207,6 +175,7 @@ bool EnableImeDataParser::CheckNeedSwitch(const std::string &key, SwitchInfo &sw
|
|||||||
} else if (key == std::string(ENABLE_KEYBOARD)) {
|
} else if (key == std::string(ENABLE_KEYBOARD)) {
|
||||||
if (currentIme->name != GetDefaultIme()->name || currentIme->id == GetDefaultIme()->id) {
|
if (currentIme->name != GetDefaultIme()->name || currentIme->id == GetDefaultIme()->id) {
|
||||||
IMSA_HILOGD("Current ime is not default or id is default.");
|
IMSA_HILOGD("Current ime is not default or id is default.");
|
||||||
|
GetEnableData(key, enableList_[key], userId);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
switchInfo.subName = GetDefaultIme()->id;
|
switchInfo.subName = GetDefaultIme()->id;
|
||||||
@ -224,7 +193,7 @@ bool EnableImeDataParser::CheckNeedSwitch(const SwitchInfo &info, const int32_t
|
|||||||
int32_t ret = 0;
|
int32_t ret = 0;
|
||||||
if (info.bundleName == GetDefaultIme()->name) {
|
if (info.bundleName == GetDefaultIme()->name) {
|
||||||
IMSA_HILOGD("Check ime keyboard.");
|
IMSA_HILOGD("Check ime keyboard.");
|
||||||
if (info.subName == GetDefaultIme()->id) {
|
if (info.subName == GetDefaultIme()->id || info.subName.empty()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
targetName = info.subName;
|
targetName = info.subName;
|
||||||
@ -299,44 +268,63 @@ int32_t EnableImeDataParser::GetEnableData(
|
|||||||
return ErrorCode::ERROR_ENABLE_IME;
|
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;
|
std::string valueStr;
|
||||||
int32_t ret = GetStringValue(key, valueStr);
|
int32_t ret = GetStringValue(key, valueStr);
|
||||||
if (ret != ErrorCode::NO_ERROR) {
|
if (ret != ErrorCode::NO_ERROR || valueStr.empty()) {
|
||||||
return ret;
|
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<std::string> &enableVec, const int32_t userId)
|
||||||
|
{
|
||||||
IMSA_HILOGD("valueStr: %{public}s.", valueStr.c_str());
|
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());
|
json jsonEnableData = json::parse(valueStr.c_str());
|
||||||
if (jsonEnableData.is_null() || jsonEnableData.is_discarded()) {
|
if (jsonEnableData.is_null() || jsonEnableData.is_discarded()) {
|
||||||
IMSA_HILOGE("json parse failed.");
|
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()) {
|
if (!jsonEnableData.contains(listName) || !jsonEnableData[listName].is_object()) {
|
||||||
IMSA_HILOGE("enableImeList not find or abnormal");
|
IMSA_HILOGE("listName not find or abnormal");
|
||||||
return ErrorCode::ERROR_ENABLE_IME;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string id = std::to_string(userId);
|
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");
|
IMSA_HILOGE("user id not find or abnormal");
|
||||||
return ErrorCode::ERROR_ENABLE_IME;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> enableVecTemp;
|
std::vector<std::string> 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());
|
IMSA_HILOGD("enable ime string: %{public}s", std::string(bundleName).c_str());
|
||||||
enableVecTemp.push_back(bundleName);
|
enableVecTemp.push_back(bundleName);
|
||||||
}
|
}
|
||||||
enableVec.assign(enableVecTemp.begin(), enableVecTemp.end());
|
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)
|
int32_t EnableImeDataParser::GetStringValue(const std::string &key, std::string &value)
|
||||||
|
@ -97,8 +97,9 @@ enum {
|
|||||||
ERROR_ADD_DEATH_RECIPIENT_FAILED = 23,
|
ERROR_ADD_DEATH_RECIPIENT_FAILED = 23,
|
||||||
ERROR_STATUS_SYSTEM_PERMISSION = 24, // not system application
|
ERROR_STATUS_SYSTEM_PERMISSION = 24, // not system application
|
||||||
ERROR_IME = 25,
|
ERROR_IME = 25,
|
||||||
ERROR_KEYWORD_NOT_FOUND = 26,
|
ERROR_PARAMETER_CHECK_FAILED = 26,
|
||||||
ERROR_ENABLE_IME = 27,
|
ERROR_KEYWORD_NOT_FOUND = 27,
|
||||||
|
ERROR_ENABLE_IME = 28,
|
||||||
};
|
};
|
||||||
}; // namespace ErrorCode
|
}; // namespace ErrorCode
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "bundle_mgr_proxy.h"
|
#include "bundle_mgr_proxy.h"
|
||||||
|
#include "enable_ime_data_parser.h"
|
||||||
#include "input_method_info.h"
|
#include "input_method_info.h"
|
||||||
#include "input_method_property.h"
|
#include "input_method_property.h"
|
||||||
#include "input_method_status.h"
|
#include "input_method_status.h"
|
||||||
@ -69,6 +70,7 @@ public:
|
|||||||
int32_t ListInputMethodSubtype(
|
int32_t ListInputMethodSubtype(
|
||||||
const int32_t userId, const std::string &bundleName, std::vector<SubProperty> &subProps);
|
const int32_t userId, const std::string &bundleName, std::vector<SubProperty> &subProps);
|
||||||
int32_t ListCurrentInputMethodSubtype(const int32_t userId, std::vector<SubProperty> &subProps);
|
int32_t ListCurrentInputMethodSubtype(const int32_t userId, std::vector<SubProperty> &subProps);
|
||||||
|
int32_t GetNextSwitchInfo(SwitchInfo &switchInfo, const int32_t userId, bool enableOn);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ImeInfoInquirer() = default;
|
ImeInfoInquirer() = default;
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
|
|
||||||
#include "application_info.h"
|
#include "application_info.h"
|
||||||
#include "bundle_mgr_client_impl.h"
|
#include "bundle_mgr_client_impl.h"
|
||||||
#include "enable_ime_data_parser.h"
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "if_system_ability_manager.h"
|
#include "if_system_ability_manager.h"
|
||||||
#include "ime_cfg_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;
|
return ErrorCode::NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t ImeInfoInquirer::GetNextSwitchInfo(SwitchInfo &switchInfo, const int32_t userId, bool enableOn)
|
||||||
|
{
|
||||||
|
std::vector<Property> 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(
|
int32_t ImeInfoInquirer::ListInputMethodSubtype(
|
||||||
const int32_t userId, const std::string &bundleName, std::vector<SubProperty> &subProps)
|
const int32_t userId, const std::string &bundleName, std::vector<SubProperty> &subProps)
|
||||||
{
|
{
|
||||||
|
@ -379,9 +379,7 @@ int32_t InputMethodSystemAbility::DisplayOptionalInputMethod()
|
|||||||
|
|
||||||
int32_t InputMethodSystemAbility::SwitchInputMethod(const std::string &bundleName, const std::string &subName)
|
int32_t InputMethodSystemAbility::SwitchInputMethod(const std::string &bundleName, const std::string &subName)
|
||||||
{
|
{
|
||||||
SwitchInfo switchInfo;
|
SwitchInfo switchInfo = { std::chrono::system_clock::now(), bundleName, subName };
|
||||||
switchInfo.bundleName = bundleName;
|
|
||||||
switchInfo.subName = subName;
|
|
||||||
if (enableImeOn_ && !EnableImeDataParser::GetInstance()->CheckNeedSwitch(switchInfo, userId_)) {
|
if (enableImeOn_ && !EnableImeDataParser::GetInstance()->CheckNeedSwitch(switchInfo, userId_)) {
|
||||||
IMSA_HILOGW("Enable mode off or switch is not enable, stoped!");
|
IMSA_HILOGW("Enable mode off or switch is not enable, stoped!");
|
||||||
return ErrorCode::ERROR_ENABLE_IME;
|
return ErrorCode::ERROR_ENABLE_IME;
|
||||||
@ -587,6 +585,9 @@ int32_t InputMethodSystemAbility::OnUserStarted(const Message *msg)
|
|||||||
return ErrorCode::NO_ERROR;
|
return ErrorCode::NO_ERROR;
|
||||||
}
|
}
|
||||||
IMSA_HILOGI("%{public}d switch to %{public}d.", oldUserId, userId_);
|
IMSA_HILOGI("%{public}d switch to %{public}d.", oldUserId, userId_);
|
||||||
|
if (enableImeOn_) {
|
||||||
|
EnableImeDataParser::GetInstance()->OnUserChanged(userId_);
|
||||||
|
}
|
||||||
auto currentIme = ImeCfgManager::GetInstance().GetCurrentImeCfg(oldUserId)->imeId;
|
auto currentIme = ImeCfgManager::GetInstance().GetCurrentImeCfg(oldUserId)->imeId;
|
||||||
StopInputService(currentIme);
|
StopInputService(currentIme);
|
||||||
// user switch, reset currentImeInfo_ = nullptr
|
// user switch, reset currentImeInfo_ = nullptr
|
||||||
@ -741,36 +742,14 @@ int32_t InputMethodSystemAbility::SwitchLanguage()
|
|||||||
|
|
||||||
int32_t InputMethodSystemAbility::SwitchType()
|
int32_t InputMethodSystemAbility::SwitchType()
|
||||||
{
|
{
|
||||||
SwitchInfo switchInfo;
|
SwitchInfo switchInfo = { std::chrono::system_clock::now(), "", "" };
|
||||||
if (enableImeOn_) {
|
int32_t ret = ImeInfoInquirer::GetInstance().GetNextSwitchInfo(switchInfo, userId_, enableImeOn_);
|
||||||
int32_t ret = EnableImeDataParser::GetInstance()->GetNextSwitchInfo(switchInfo, userId_);
|
if (ret != ErrorCode::NO_ERROR) {
|
||||||
if (ret != ErrorCode::NO_ERROR) {
|
IMSA_HILOGE("Get next SwitchInfo failed, stop switching ime.");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
|
||||||
switchInfo.timestamp = std::chrono::system_clock::now();
|
|
||||||
} else {
|
|
||||||
std::vector<Property> 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();
|
|
||||||
}
|
}
|
||||||
IMSA_HILOGD("switch to: %{public}s", switchInfo.bundleName.c_str());
|
IMSA_HILOGD("switch to: %{public}s", switchInfo.bundleName.c_str());
|
||||||
|
switchInfo.timestamp = std::chrono::system_clock::now();
|
||||||
switchQueue_.Push(switchInfo);
|
switchQueue_.Push(switchInfo);
|
||||||
return OnSwitchInputMethod(switchInfo, false);
|
return OnSwitchInputMethod(switchInfo, false);
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
namespace OHOS {
|
namespace OHOS {
|
||||||
namespace DataShare {
|
namespace DataShare {
|
||||||
|
constexpr int32_t E_OK = 0;
|
||||||
class DataSharePredicates {
|
class DataSharePredicates {
|
||||||
public:
|
public:
|
||||||
DataSharePredicates *EqualTo(const std::string &field, const std::string &value);
|
DataSharePredicates *EqualTo(const std::string &field, const std::string &value);
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
|
|
||||||
namespace OHOS {
|
namespace OHOS {
|
||||||
namespace MiscServices {
|
namespace MiscServices {
|
||||||
|
|
||||||
using BRemoteObject = IPCObjectStub;
|
using BRemoteObject = IPCObjectStub;
|
||||||
|
|
||||||
#define LOG_INFO(fmt, args...) \
|
#define LOG_INFO(fmt, args...) \
|
||||||
@ -66,10 +65,6 @@ constexpr int32_t ERROR_ENABLE_IME = 27;
|
|||||||
|
|
||||||
}; // namespace ErrorCode
|
}; // namespace ErrorCode
|
||||||
|
|
||||||
namespace DataShare {
|
|
||||||
constexpr int32_t E_OK = 0;
|
|
||||||
}; // namespace DataShare
|
|
||||||
|
|
||||||
constexpr HiviewDFX::HiLogLabel g_SMALL_SERVICES_LABEL = { LOG_CORE, 0xD001C00, "ImsaKit" };
|
constexpr HiviewDFX::HiLogLabel g_SMALL_SERVICES_LABEL = { LOG_CORE, 0xD001C00, "ImsaKit" };
|
||||||
|
|
||||||
#define IMSA_HILOGD(fmt, ...) \
|
#define IMSA_HILOGD(fmt, ...) \
|
||||||
|
@ -121,7 +121,7 @@ HWTEST_F(EnableImeDataParseTest, testGetEnableData_002, TestSize.Level0)
|
|||||||
HWTEST_F(EnableImeDataParseTest, testGetEnableData_003, TestSize.Level0)
|
HWTEST_F(EnableImeDataParseTest, testGetEnableData_003, TestSize.Level0)
|
||||||
{
|
{
|
||||||
IMSA_HILOGI("EnableImeDataParseTest testGetEnableData_003 START");
|
IMSA_HILOGI("EnableImeDataParseTest testGetEnableData_003 START");
|
||||||
EnableImeDataParseTest::resultSet_->strValue_ = "";
|
EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : []}}";
|
||||||
std::vector<std::string> enableVec;
|
std::vector<std::string> enableVec;
|
||||||
int32_t ret =
|
int32_t ret =
|
||||||
EnableImeDataParser::GetInstance()->GetEnableData(IME_KEY, enableVec, EnableImeDataParseTest::USER_ID);
|
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");
|
IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_005 START");
|
||||||
ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "xiaoyiIme";
|
ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "xiaoyiIme";
|
||||||
ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->id = "xiaoyiImeId";
|
ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->id = "xiaoyiImeId";
|
||||||
EnableImeDataParseTest::resultSet_->strValue_ = "";
|
EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : []}}";
|
||||||
SwitchInfo switchInfo;
|
SwitchInfo switchInfo;
|
||||||
EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("xiaoyiIme");
|
EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("xiaoyiIme");
|
||||||
EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("baiduIme");
|
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.name: testOnUserChanged_001
|
||||||
* @tc.desc: Test local enable list cache change when user changed.
|
* @tc.desc: Test local enable list cache change when user changed.
|
||||||
|
Loading…
Reference in New Issue
Block a user