/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @addtogroup InputMethod
* @{
*
* @brief InputMethod模块提供C语言接口来使用输入法。"使用输入法"面向应用侧调用。
*
*
功能定位:该模块为应用侧开发者提供自绘输入框与输入法服务交互的完整C API,支持应用绑定/解绑输入法服务、向输入法发送请求
* 和通知、接收输入法的回调通知、配置输入框属性、管理光标和避让信息等核心功能。
*
*
使用场景:适用于使用NDK开发自绘输入框的应用,需要与系统输入法服务进行交互的场景。典型流程为:应用创建TextEditorProxy
* (文本编辑器代理)和AttachOptions(绑定配置选项),通过Controller绑定输入法服务,绑定成功后通过InputMethodProxy(输入法代
* 理)与输入法交互,使用完毕后通过Controller解绑。
*
*
使用后效果:绑定输入法后,应用可接收输入法的文本插入、删除、光标移动等回调通知,也可主动向输入法发送光标更新、选区变
* 更、私有命令等请求。解绑后,所有交互通道关闭,相关资源释放。
*
*
生命周期管理:本模块遵循严格的创建/销毁配对原则和绑定/解绑配对原则:
*
*
- 绑定/解绑配对:OH_InputMethodController_Attach必须与OH_InputMethodController_Detach配对调用,未解绑会导致输入法
* 资源泄漏。
*
- 创建/销毁配对:所有Create函数创建的对象必须通过对应的Destroy函数销毁,否则会导致内存泄漏。
*
- 调用顺序:先创建依赖对象(TextEditorProxy、AttachOptions),再执行Attach绑定,绑定成功后使用InputMethodProxy交
* 互,最后Detach解绑并销毁所有创建的对象。
*
*
线程安全:本模块的API非线程安全,建议在主线程调用。TextEditorProxy的回调执行线程可通过
* OH_TextEditorProxy_SetCallbackInMainThread配置。
*
*
模块架构: 本模块由9个头文件组成,按职责分为四层:
*
*
- 控制层:inputmethod_controller_capi.h —— 模块核心入口,提供绑定/解绑输入法服务的能力,是所有交互的起点和终点。
*
- 交互层:inputmethod_text_editor_proxy_capi.h和inputmethod_inputmethod_proxy_capi.h —— 双向交互通道。
* TextEditorProxy是输入法→应用方向的回调注册通道,应用通过它接收输入法的文本插入、删除等通知;InputMethodProxy是应用→输入法方向
* 的请求发送通道,应用通过它向输入法发送光标更新、选区变更等通知。
*
- 配置层:inputmethod_attach_options_capi.h、inputmethod_text_config_capi.h、inputmethod_cursor_info_capi.h、
* inputmethod_text_avoid_info_capi.h —— 各类配置和信息的承载对象,分别管理绑定选项、输入框配置、光标位置信息、避让区域信息。
*
- 数据层:inputmethod_private_command_capi.h和inputmethod_types_capi.h —— 私有命令数据和公共类型定义(枚举、错误
* 码等)。
*
*
典型调用流程:
*
1. 通过inputmethod_text_editor_proxy_capi.h创建TextEditorProxy并注册回调。
*
2. 通过inputmethod_attach_options_capi.h创建AttachOptions配置绑定选项。
*
3. 通过inputmethod_controller_capi.h调用Attach绑定输入法,获取InputMethodProxy。
*
4. 通过inputmethod_inputmethod_proxy_capi.h使用InputMethodProxy与输入法交互。
*
5. 通过inputmethod_text_config_capi.h、inputmethod_cursor_info_capi.h等管理配置信息。
*
6. 通过inputmethod_controller_capi.h调用Detach解绑。
*
7. 销毁所有创建的对象。
*
* @library libohinputmethod.so
* @kit IMEKit
* @syscap SystemCapability.MiscServices.InputMethodFramework
* @since 12
*/
/**
* @file inputmethod_private_command_capi.h
*
* @brief 提供私有数据对象的创建、销毁与读写方法。InputMethod_PrivateCommand采用key-value机制,支持输入法应用与编辑框客户端之间
* 传递自定义私有数据,用于扩展输入法功能、传递特定场景指令或交换自定义配置信息。
*
*
该结构体的value支持三种数据类型:布尔值(bool)、整数(int32_t)和字符串(string),但同一个PrivateCommand实例只能设
* 置一种类型的value。设置value时会覆盖之前已设置的value及其类型。获取value时,建议先通过OH_PrivateCommand_GetValueType判断当
* 前value的数据类型,再调用对应的GetValue函数获取实际值,否则当请求的类型与实际存储类型不匹配时将返回IME_ERR_QUERY_FAILED。
*
*
该结构体主要在两种场景中使用:输入法应用通过OH_InputMethodProxy_SendPrivateCommand向编辑框客户端发送私有指令;编辑框
* 客户端通过OH_TextEditorProxy_ReceivePrivateCommandFunc回调接收来自输入法应用的私有指令。单次发送的所有私有数据与key值的大小
* 总和限制为32KB,最多可发送5个PrivateCommand实例。
*
* @include
* @library libohinputmethod.so
* @kit IMEKit
* @syscap SystemCapability.MiscServices.InputMethodFramework
* @since 12
* @version 1.0
*/
#ifndef OHOS_INPUTMETHOD_PRIVATE_COMMAND_CAPI_H
#define OHOS_INPUTMETHOD_PRIVATE_COMMAND_CAPI_H
#include
#include
#include "inputmethod_types_capi.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* @brief 私有命令结构体,采用key-value机制,作为输入框与输入法应用之间传递私有数据的载体。可用于传递自定义指令、扩展能力参数和特
* 定场景数据,提升输入法功能的扩展性和兼容性。每个PrivateCommand实例包含一个key(标识符字符串)和一个value(布尔值、整数或字符
* 串,三种类型只能选择一种),value的数据类型由InputMethod_CommandValueType标识。
*
*
私有命令结构体,采用key-value机制,作为输入框与输入法应用之间传递私有数据的载体。可用于传递自定义指令、扩展能力参数和
* 特定场景数据,提升输入法功能的扩展性和兼容性。每个PrivateCommand实例包含一个key(标识符字符串)和一个value(布尔值、整数或字符
* 串,三种类型只能选择一种),value的数据类型由InputMethod_CommandValueType标识。
*
*
用途:在输入法应用与编辑框客户端之间传递私有数据,实现双方的自定义通信。输入法应用通过
* OH_InputMethodProxy_SendPrivateCommand向编辑框客户端发送私有指令;编辑框客户端通过
* OH_TextEditorProxy_ReceivePrivateCommandFunc回调接收来自输入法应用的私有指令。每个PrivateCommand实例携带一条key-value私有
* 数据,最多可同时发送5个实例,单次发送的所有私有数据与key值的大小总和限制为32KB。
*
*
使用场景:
*
- 输入法应用向编辑框发送私有指令:输入法应用创建PrivateCommand实例,设置key和value后,通过
* [OH_InputMethodProxy_SendPrivateCommand](capi-inputmethod-inputmethod-proxy-capi-h.
* md#oh_inputmethodproxy_sendprivatecommand)发送给编辑框客户端。
*
- 编辑框客户端接收私有指令:编辑框客户端在[OH_TextEditorProxy_ReceivePrivateCommandFunc]
* (capi-inputmethod-text-editor-proxy-capi-h.md#oh_texteditorproxy_receiveprivatecommandfunc)回调中接收PrivateCommand实
* 例数组,遍历数组解析每个实例的key和value。
*
*
相关函数:
* | 函数 | 说明 |
* | --- | --- |
* | [OH_PrivateCommand_Create](capi-inputmethod-private-command-capi-h.md#oh_privatecommand_create) | 创建
* InputMethod_PrivateCommand实例。|
* | [OH_PrivateCommand_Destroy](capi-inputmethod-private-command-capi-h.md#oh_privatecommand_destroy) | 销毁
* InputMethod_PrivateCommand实例。 |
* | [OH_PrivateCommand_SetKey](capi-inputmethod-private-command-capi-h.md#oh_privatecommand_setkey) | 设置key值。 |
* | [OH_PrivateCommand_SetBoolValue](capi-inputmethod-private-command-capi-h.
* md#oh_privatecommand_setboolvalue) | 设置布尔类型value值。 |
* | [OH_PrivateCommand_SetIntValue](capi-inputmethod-private-command-capi-h.
* md#oh_privatecommand_setintvalue) | 设置整数类型value值。 |
* | [OH_PrivateCommand_SetStrValue](capi-inputmethod-private-command-capi-h.
* md#oh_privatecommand_setstrvalue) | 设置字符串类型value值。 |
* | [OH_PrivateCommand_GetKey](capi-inputmethod-private-command-capi-h.md#oh_privatecommand_getkey) | 获取key值。 |
* | [OH_PrivateCommand_GetValueType](capi-inputmethod-private-command-capi-h.
* md#oh_privatecommand_getvaluetype) | 获取value的数据类型。 |
* | [OH_PrivateCommand_GetBoolValue](capi-inputmethod-private-command-capi-h.
* md#oh_privatecommand_getboolvalue) | 获取布尔类型value值。 |
* | [OH_PrivateCommand_GetIntValue](capi-inputmethod-private-command-capi-h.
* md#oh_privatecommand_getintvalue) | 获取整数类型value值。 |
* | [OH_PrivateCommand_GetStrValue](capi-inputmethod-private-command-capi-h.
* md#oh_privatecommand_getstrvalue) | 获取字符串类型value值。 |
*
*
相关接口:
* | 接口 | 说明 |
* | --- | --- |
* | [OH_InputMethodProxy_SendPrivateCommand](capi-inputmethod-inputmethod-proxy-capi-h.
* md#oh_inputmethodproxy_sendprivatecommand) | 输入法应用向编辑框客户端发送私有指令,PrivateCommand实例数组作为参数传入。最
* 多5个实例,数据总大小限制32KB。 |
* | [OH_TextEditorProxy_ReceivePrivateCommandFunc](capi-inputmethod-text-editor-proxy-capi-h.
* md#oh_texteditorproxy_receiveprivatecommandfunc) | 编辑框客户端接收私有指令的回调函数,PrivateCommand实例数组作为参数传
* 入。回调返回后实例内存被释放。 |
*
*
相关枚举:
* | 枚举 | 说明 |
* | --- | --- |
* | [InputMethod_CommandValueType](capi-inputmethod-types-capi-h.md#
* inputmethod_commandvaluetype) | PrivateCommand中value的数据类型枚举(NONE/STRING/BOOL/INT32)。 |
*
* @since 12
*/
typedef struct InputMethod_PrivateCommand InputMethod_PrivateCommand;
/**
* @brief 创建一个新的{@link InputMethod_PrivateCommand}实例。创建时需指定key值,key为私有命令的标识符,用于区分不同的私有数据
* 项。创建后的实例value类型默认为IME_COMMAND_VALUE_TYPE_NONE,需后续通过SetBoolValue/SetIntValue/SetStrValue设置value值及其
* 类型。
*
*
使用场景:输入法应用需要向编辑框客户端传递私有数据时,首先调用此函数创建PrivateCommand实例,设置key和value后,通过
* OH_InputMethodProxy_SendPrivateCommand发送。编辑框客户端在OH_TextEditorProxy_ReceivePrivateCommandFunc回调中接收到的
* PrivateCommand实例也可使用本函数创建新的回复指令。
*
*
前置条件:key参数必须为非NULL指针,keyLength必须大于0且不超过单次所有私有数据与key值的大小总和32KB的限制。
*
*
使用后效果:成功调用后返回一个新创建的InputMethod_PrivateCommand实例指针,该实例的value类型初始为
* IME_COMMAND_VALUE_TYPE_NONE。调用方需负责该实例的生命周期管理,在使用完毕后必须调用OH_PrivateCommand_Destroy销毁实例以释放
* 内存。
*
* @param key 私有数据的key值,用于标识该私有命令的含义。key值为字符串形式,不允许传入NULL指针。单次发送的所有私有数据与key值的大
* 小总和限制为32KB(包括所有PrivateCommand实例的key和value数据)。建议key值具有明确的语义标识,便于接收方解析。
* @param keyLength key值的字节长度,不包括结尾空字符。必须大于0。单次所有私有数据与key值的大小限制32KB。若keyLength为0,创建行
* 为未定义。
* @return 如果创建成功,返回一个指向新创建的{@link InputMethod_PrivateCommand}实例的指针。调用方必须负责该实例的生命周期管理,
* 使用完毕后调用{@link OH_PrivateCommand_Destroy}销毁实例以释放内存。
*
如果创建失败,返回NULL。可能的失败原因:内存分配不足(应用地址空间满)。对NULL指针的后续操作(如Set/Get函数)将返回
* IME_ERR_NULL_POINTER。
* @since 12
*/
InputMethod_PrivateCommand *OH_PrivateCommand_Create(char key[], size_t keyLength);
/**
* @brief 销毁一个{@link InputMethod_PrivateCommand}实例,释放其占用的内存资源,包括key值和value值(字符串类型value)所占用的
* 内部内存。
*
*
使用场景:当PrivateCommand实例不再使用时,调用此函数销毁实例。必须在Create函数成功返回后、且实例不再被任何其他对象引
* 用时调用。特别注意:通过OH_InputMethodProxy_SendPrivateCommand发送后,原始实例仍需由发送方自行销毁;通过
* ReceivePrivateCommandFunc回调接收到的实例,其生命周期由回调调用期间管理,回调返回后该实例内存将被释放,不应再销毁或访问。
*
*
生命周期管理:OH_PrivateCommand_Create和OH_PrivateCommand_Destroy必须配对使用,每个Create创建的实例必须有对应的
* Destroy调用,否则会导致内存泄漏。调用Destroy后,原指针变为无效指针,不应再被使用。
*
*
前置条件:command参数应为OH_PrivateCommand_Create成功返回的非NULL指针。
*
*
使用后效果:command指向的内存被释放,包括内部存储的key字符串和value字符串的内存。command指针变为无效指针。对已销毁指
* 针的任何后续访问均为未定义行为。
*
* @param command 指向即将被销毁的{@link InputMethod_PrivateCommand}实例的指针。若传入NULL,函数不执行任何操作,安全返回。建议
* 销毁后将指针置为NULL以避免误用悬空指针。
* @since 12
*/
void OH_PrivateCommand_Destroy(InputMethod_PrivateCommand *command);
/**
* @brief 设置{@link InputMethod_PrivateCommand}的key值。key值为私有命令的标识符,用于接收方区分不同含义的私有数据。
*
*
使用场景:当需要修改已有PrivateCommand实例的key值时调用此函数。通常在Create时已设置初始key值,若需要更新key可再次调
* 用此函数。
*
*
前置条件:command参数必须为OH_PrivateCommand_Create成功返回的非NULL指针;key参数必须为非NULL指针;keyLength必须大
* 于0。
*
* @param command 指向即将被设置的{@link InputMethod_PrivateCommand}实例的指针。不允许传入NULL指针,否则返回
* IME_ERR_NULL_POINTER。
* @param key key值,用于标识私有命令的含义。不允许传入NULL指针,否则返回IME_ERR_NULL_POINTER。建议使用具有明确语义的字符串作为
* key,便于接收方解析和处理。
* @param keyLength key值的字节长度,不包括结尾空字符。必须大于0。单次所有私有数据与key值的大小限制32KB。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功。
*
{@link IME_ERR_NULL_POINTER} - 传入的command参数或key参数为空指针。
*
具体错误码可以参考 {@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_PrivateCommand_SetKey(InputMethod_PrivateCommand *command, char key[], size_t keyLength);
/**
* @brief 设置{@link InputMethod_PrivateCommand}的布尔类型value值。调用此函数后,
* 该PrivateCommand实例的value类型将变为IME_COMMAND_VALUE_TYPE_BOOL,之前已设置的其他类型value值(int32_t或string)将被覆盖。
*
*
使用场景:当私有命令的value需要传递布尔类型数据时调用此函数,如传递开关状态、是否启用某功能等布尔语义的数据。
*
*
前置条件:command参数必须为OH_PrivateCommand_Create成功返回的非NULL指针。
*
*
值类型规则:同一个PrivateCommand实例只能持有一种类型的value。调用SetBoolValue后,value类型变为
* IME_COMMAND_VALUE_TYPE_BOOL,之前通过SetIntValue或SetStrValue设置的value将被覆盖。后续通过GetIntValue或GetStrValue获取值
* 时将返回IME_ERR_QUERY_FAILED。
*
* @param command 指向即将被设置的{@link InputMethod_PrivateCommand}实例的指针。不允许传入NULL指针,否则返回
* IME_ERR_NULL_POINTER。
* @param value 布尔类型value值,true或false。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功,value类型已设置为IME_COMMAND_VALUE_TYPE_BOOL。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,command参数为NULL。
*
具体错误码可以参考 {@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_PrivateCommand_SetBoolValue(InputMethod_PrivateCommand *command, bool value);
/**
* @brief 设置{@link InputMethod_PrivateCommand}的整数类型value值。调用此函数后,
* 该PrivateCommand实例的value类型将变为IME_COMMAND_VALUE_TYPE_INT32,之前已设置的其他类型value值(bool或string)将被覆盖。
*
*
使用场景:当私有命令的value需要传递整数类型数据时调用此函数,如传递数值参数、计数、版本号等整数语义的数据。
*
*
前置条件:command参数必须为OH_PrivateCommand_Create成功返回的非NULL指针。
*
*
值类型规则:同一个PrivateCommand实例只能持有一种类型的value。调用SetIntValue后,value类型变为
* IME_COMMAND_VALUE_TYPE_INT32,之前通过SetBoolValue或SetStrValue设置的value将被覆盖。后续通过GetBoolValue或GetStrValue获
* 取值时将返回IME_ERR_QUERY_FAILED。
*
* @param command 指向即将被设置的{@link InputMethod_PrivateCommand}实例的指针。不允许传入NULL指针,否则返回
* IME_ERR_NULL_POINTER。
* @param value 整数类型的value值,32位带符号整数。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功,value类型已设置为IME_COMMAND_VALUE_TYPE_INT32。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,command参数为NULL。
*
具体错误码可以参考 {@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_PrivateCommand_SetIntValue(InputMethod_PrivateCommand *command, int32_t value);
/**
* @brief 设置{@link InputMethod_PrivateCommand}的字符串类型value值。调用此函数后,
* 该PrivateCommand实例的value类型将变为IME_COMMAND_VALUE_TYPE_STRING,之前已设置的其他类型value值(bool或int32_t)将被覆盖。
*
*
使用场景:当私有命令的value需要传递字符串类型数据时调用此函数,如传递文本配置、URL、JSON格式参数等字符串语义的数据。
*
*
前置条件:command参数必须为OH_PrivateCommand_Create成功返回的非NULL指针;value参数必须为非NULL指针;valueLength必
* 须大于0。
*
*
值类型规则:同一个PrivateCommand实例只能持有一种类型的value。调用SetStrValue后,value类型变为
* IME_COMMAND_VALUE_TYPE_STRING,之前通过SetBoolValue或SetIntValue设置的value将被覆盖。后续通过GetBoolValue或GetIntValue获
* 取值时将返回IME_ERR_QUERY_FAILED。
*
*
内存管理:value字符串由调用方提供,SetStrValue函数会将字符串内容拷贝到PrivateCommand实例的内部存储中。调用方可在
* SetStrValue调用后立即释放原始value内存,无需保持value指针有效。
*
* @param command 指向即将被设置的{@link InputMethod_PrivateCommand}实例的指针。不允许传入NULL指针,否则返回
* IME_ERR_NULL_POINTER。
* @param value 字符串类型value值。不允许传入NULL指针,否则返回IME_ERR_NULL_POINTER。字符串内容将被拷贝到PrivateCommand实例的
* 内部存储中,调用方无需在SetStrValue调用后保持value指针有效。
* @param valueLength 表示字符串数据值的字节长度,不包括结尾空字符。必须大于0。单次所有私有数据与key值的大小限制32KB。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功,value类型已设置为IME_COMMAND_VALUE_TYPE_STRING。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,command参数或value参数为NULL。
*
具体错误码可以参考 {@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_PrivateCommand_SetStrValue(
InputMethod_PrivateCommand *command, char value[], size_t valueLength);
/**
* @brief 从{@link InputMethod_PrivateCommand}获取key值。key值为私有命令的标识符。
*
*
使用场景:接收方在OH_TextEditorProxy_ReceivePrivateCommandFunc回调中获取到PrivateCommand实例后,首先通过此函数获取
* key值,根据key的含义决定如何处理对应的value数据。
*
*
前置条件:command参数必须为非NULL指针;key和keyLength输出参数必须为非NULL指针,且由调用方分配内存。
*
*
内存管理:key指针指向的字符串生命周期与command实例一致。请勿直接保存key地址(因为在command销毁后key指针将失效),也不
* 应直接修改key内容。推荐做法是先拷贝key字符串到调用方的自有内存后再使用。
* command实例销毁后(OH_PrivateCommand_Destroy或回调返回后),key指针失效,对失效指针的访问为未定义行为。
*
* @param command 指向即将被获取key值的{@link InputMethod_PrivateCommand}实例的指针。不允许传入NULL指针,否则返回
* IME_ERR_NULL_POINTER。
* @param key 输出参数,用于接收key值的字符串指针。key的生命周期和command一致,请勿直接保存key地址,也不应直接操作key内容;推荐
* 先拷贝后再使用。command实例销毁后,key指针失效,不应再访问。
* 不允许传入NULL指针,否则返回IME_ERR_NULL_POINTER。
* @param keyLength 输出参数,用于接收key值的字节长度。不允许传入NULL指针,否则返回IME_ERR_NULL_POINTER。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功,key和keyLength已被写入值。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,command、key或keyLength参数为NULL。
*
具体错误码可以参考 {@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_PrivateCommand_GetKey(
InputMethod_PrivateCommand *command, const char **key, size_t *keyLength);
/**
* @brief 从{@link InputMethod_PrivateCommand}获取value的数据类型。返回的类型指示了该实例当前存储的value值的类型,用于指导后续
* 应调用哪个GetValue函数来获取实际的value值。
*
*
使用场景:在获取value值之前,必须先调用此函数判断value的数据类型,再根据类型调用对应的GetValue函数(GetBoolValue、
* GetIntValue或GetStrValue)。若直接调用与实际类型不匹配的GetValue函数,将返回IME_ERR_QUERY_FAILED错误码。
*
*
前置条件:command参数必须为非NULL指针;type输出参数必须为非NULL指针,且由调用方分配内存。
*
*
使用建议:建议在每次获取value值前都先调用GetValueType确认类型,避免因类型不匹配导致IME_ERR_QUERY_FAILED错误。
*
*
典型调用顺序:
*
1. 调用OH_PrivateCommand_GetValueType获取类型;
*
2. 根据类型判断调用OH_PrivateCommand_GetBoolValue/OH_PrivateCommand_GetIntValue/
* OH_PrivateCommand_GetStrValue。
*
* @param command 指向即将被获取value类型的{@link InputMethod_PrivateCommand}实例的指针。不允许传入NULL指针,否则返回
* IME_ERR_NULL_POINTER。
* @param type 输出参数,用于获取value值的数据类型。返回值为{@link InputMethod_CommandValueType}枚举值:
* IME_COMMAND_VALUE_TYPE_NONE表示未设置value;IME_COMMAND_VALUE_TYPE_STRING表示字符串类型;IME_COMMAND_VALUE_TYPE_BOOL表
* 示布尔类型;IME_COMMAND_VALUE_TYPE_INT32表示32位带符号整数类型。不允许传入NULL指针,否则返回IME_ERR_NULL_POINTER。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功,type已被写入当前value的数据类型。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,command或type参数为NULL。
*
具体错误码可以参考 {@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_PrivateCommand_GetValueType(
InputMethod_PrivateCommand *command, InputMethod_CommandValueType *type);
/**
* @brief 从{@link InputMethod_PrivateCommand}获取布尔类型的value的值。
*
*
使用场景:当通过OH_PrivateCommand_GetValueType确认value类型为IME_COMMAND_VALUE_TYPE_BOOL后,调用此函数获取布尔
* 值。
*
*
前置条件:command参数必须为非NULL指针;value输出参数必须为非NULL指针,且由调用方分配内存。当前PrivateCommand实例的
* value类型必须为IME_COMMAND_VALUE_TYPE_BOOL,否则将返回IME_ERR_QUERY_FAILED。
*
*
类型不匹配处理:若当前value类型不是IME_COMMAND_VALUE_TYPE_BOOL(例如为IME_COMMAND_VALUE_TYPE_INT32或
* IME_COMMAND_VALUE_TYPE_STRING),此函数将返回IME_ERR_QUERY_FAILED错误码,表示查询失败——命令中没有布尔值。建议先调用
* OH_PrivateCommand_GetValueType确认类型后再获取值。
*
* @param command 指向即将被获取value值的{@link InputMethod_PrivateCommand}实例的指针。不允许传入NULL指针,否则返回IME_ERR_NULL_POINTER。
* @param value 输出参数,用于接收布尔类型的value值。此参数为输出指针,调用方需分配bool类型变量的内存并将其地址传入。不允许传入
* NULL指针,否则返回IME_ERR_NULL_POINTER。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功,value指针指向的内存已被写入布尔值。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,command或value参数为NULL。
*
{@link IME_ERR_QUERY_FAILED} - 查询失败,命令中没有布尔值,即当前value类型不是IME_COMMAND_VALUE_TYPE_BOOL(类型不
* 匹配)。建议先调用OH_PrivateCommand_GetValueType确认类型。
*
具体错误码可以参考 {@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_PrivateCommand_GetBoolValue(InputMethod_PrivateCommand *command, bool *value);
/**
* @brief 从{@link InputMethod_PrivateCommand}获取整数类型的value的值。
*
*
使用场景:当通过OH_PrivateCommand_GetValueType确认value类型为IME_COMMAND_VALUE_TYPE_INT32后,调用此函数获取整数
* 值。
*
*
前置条件:command参数必须为非NULL指针;value输出参数必须为非NULL指针,且由调用方分配内存。当前PrivateCommand实例的
* value类型必须为IME_COMMAND_VALUE_TYPE_INT32,否则将返回IME_ERR_QUERY_FAILED。
*
*
类型不匹配处理:若当前value类型不是IME_COMMAND_VALUE_TYPE_INT32(例如为IME_COMMAND_VALUE_TYPE_BOOL或
* IME_COMMAND_VALUE_TYPE_STRING),此函数将返回IME_ERR_QUERY_FAILED错误码,表示查询失败——命令中没有整数值。建议先调用
* OH_PrivateCommand_GetValueType确认类型后再获取值。
*
* @param command 指向即将被获取value值的{@link InputMethod_PrivateCommand}实例的指针。不允许传入NULL指针,否则返回
* IME_ERR_NULL_POINTER。
* @param value 输出参数,用于接收整数类型的value值。此参数为输出指针,调用方需分配int32_t类型变量的内存并将其地址传入。不允许传
* 入NULL指针,否则返回IME_ERR_NULL_POINTER。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功,value指针指向的内存已被写入整数值。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,command或value参数为NULL。
*
{@link IME_ERR_QUERY_FAILED} - 查询失败,命令中没有整数值,即当前value类型不是IME_COMMAND_VALUE_TYPE_INT32(类型
* 不匹配)。 建议先调用OH_PrivateCommand_GetValueType确认类型。
*
具体错误码可以参考 {@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_PrivateCommand_GetIntValue(InputMethod_PrivateCommand *command, int32_t *value);
/**
* @brief 从{@link InputMethod_PrivateCommand}获取字符串类型的value的值。
*
*
使用场景:当通过OH_PrivateCommand_GetValueType确认value类型为IME_COMMAND_VALUE_TYPE_STRING后,调用此函数获取字符
* 串值。
*
*
前置条件:command参数必须为非NULL指针;value和valueLength输出参数必须为非NULL指针,且由调用方分配内存。当前
* PrivateCommand实例的value类型必须为IME_COMMAND_VALUE_TYPE_STRING,否则将返回IME_ERR_QUERY_FAILED。
*
*
类型不匹配处理:若当前value类型不是IME_COMMAND_VALUE_TYPE_STRING(例如为IME_COMMAND_VALUE_TYPE_BOOL或
* IME_COMMAND_VALUE_TYPE_INT32),此函数将返回IME_ERR_QUERY_FAILED错误码,表示查询失败——命令中没有字符串值。建议先调用
* OH_PrivateCommand_GetValueType确认类型后再获取值。
*
*
内存管理:value指针指向的字符串生命周期与command实例一致。请勿直接保存value地址(因为在command销毁后value指针将失
* 效),也不应直接修改value内容。推荐做法是先拷贝字符串到调用方的自有内存后再使用。command实例销毁后
* (OH_PrivateCommand_Destroy或回调返回后),value指针失效,对失效指针的访问为未定义行为。
*
* @param command 指向即将被获取value值的{@link InputMethod_PrivateCommand}实例的指针。不允许传入NULL指针,否则返回
* IME_ERR_NULL_POINTER。
* @param value 输出参数,用于接收字符串类型value值的指针。value的生命周期和command一致,请勿直接保存value地址,也不应直接修改
* value内容;推荐先拷贝后再使用。command实例销毁后,value指针失效,不应再访问。不允许传入NULL指针,否则返回
* IME_ERR_NULL_POINTER。
* @param valueLength 输出参数,用于返回字符串类型value值的字节长度。不允许传入NULL指针,否则返回IME_ERR_NULL_POINTER。
* @return 返回一个特定的错误码。
*
{@link IME_ERR_OK} - 表示成功,value和valueLength已被写入值。
*
{@link IME_ERR_NULL_POINTER} - 非预期的空指针,command、value或valueLength参数为NULL。
*
{@link IME_ERR_QUERY_FAILED} - 查询失败,命令中没有字符串值,即当前value类型不是IME_COMMAND_VALUE_TYPE_STRING(类
* 型不匹配)。建议先调用OH_PrivateCommand_GetValueType确认类型。
*
具体错误码可以参考 {@link InputMethod_ErrorCode}。
* @since 12
*/
InputMethod_ErrorCode OH_PrivateCommand_GetStrValue(
InputMethod_PrivateCommand *command, const char **value, size_t *valueLength);
#ifdef __cplusplus
}
#endif /* __cplusplus */
/** @} */
#endif // OHOS_INPUTMETHOD_PRIVATE_COMMAND_CAPI_H