mirror of
https://github.com/openharmony/ability_ability_runtime.git
synced 2026-08-25 12:23:20 -04:00
open static onSizeChange
Signed-off-by: zhangzezhong <zhangzezhong8@huawei-partners.com>
This commit is contained in:
@@ -61,6 +61,8 @@ public:
|
||||
void OnConfigurationUpdated(const AppExecFwk::Configuration& configuration) override;
|
||||
|
||||
FormState OnAcquireFormState(const Want &want) override;
|
||||
|
||||
void OnSizeChanged(int64_t formId, int32_t newDimension, const Rect &newRect) override;
|
||||
private:
|
||||
void BindContext(std::shared_ptr<AbilityInfo> &abilityInfo, std::shared_ptr<AAFwk::Want> want,
|
||||
const std::string &moduleName, const std::string &srcPath);
|
||||
@@ -79,6 +81,11 @@ private:
|
||||
std::vector<FormDataProxy> &formDataProxies);
|
||||
|
||||
bool ConvertFromDataProxies(ani_env *env, ani_object arrayValue, std::vector<FormDataProxy> &formDataProxies);
|
||||
|
||||
ani_object WrapFormRect(ani_env *env, const Rect &newRect);
|
||||
|
||||
bool CreateObject(ani_env *env, ani_object &object, const std::string &className);
|
||||
|
||||
std::string ANIUtils_ANIStringToStdString(ani_env *env, ani_string ani_str);
|
||||
ani_status ANIUtils_FormIdToAniString(ani_env *env, int64_t formId, ani_string &formIdStr);
|
||||
std::unique_ptr<NativeReference> etsObj_;
|
||||
|
||||
@@ -39,6 +39,10 @@ constexpr const char* RECORD_CLASS_NAME = "std.core.Record";
|
||||
constexpr const char *FORM_LOCATION_STATE_ENUM_NAME = "@ohos.app.form.formInfo.formInfo.FormLocation";
|
||||
constexpr const char *FORM_LOCATION_CHANGED_STATE_NAME =
|
||||
"C{std.core.String}C{@ohos.app.form.formInfo.formInfo.FormLocation}:";
|
||||
constexpr const char *FORM_DIMENSION_ENUM_NAME = "@ohos.app.form.formInfo.formInfo.FormDimension";
|
||||
constexpr const char *FORM_SIZE_CHANGED_NAME =
|
||||
"C{std.core.String}C{@ohos.app.form.formInfo.formInfo.FormDimension}C{@ohos.app.form.formInfo.formInfo.Rect}:";
|
||||
constexpr const char* FORM_RECT_NAME = "@ohos.app.form.formInfo.formInfo.RectInner";
|
||||
}
|
||||
|
||||
extern "C" __attribute__((visibility("default"))) FormExtension *OHOS_ABILITY_ETSFormExtension(
|
||||
@@ -830,5 +834,119 @@ FormState ETSFormExtension::OnAcquireFormState(const Want &want)
|
||||
TAG_LOGI(AAFwkTag::FORM_EXT, "OnAcquireFormState End");
|
||||
return static_cast<AppExecFwk::FormState>(state);
|
||||
}
|
||||
|
||||
void ETSFormExtension::OnSizeChanged(int64_t formId, int32_t newDimension, const Rect &newRect)
|
||||
{
|
||||
TAG_LOGI(AAFwkTag::FORM_EXT, "Form size changed, formId: %{public}" PRId64, formId);
|
||||
FormExtension::OnSizeChanged(formId, newDimension, newRect);
|
||||
|
||||
auto env = etsRuntime_.GetAniEnv();
|
||||
if (env == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "env nullptr");
|
||||
return;
|
||||
}
|
||||
if (etsAbilityObj_ == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "etsAbilityObj nullptr");
|
||||
return;
|
||||
}
|
||||
|
||||
ani_string formIdStr = AppExecFwk::GetAniString(env, std::to_string(formId));
|
||||
ani_enum_item newDimensionItem = nullptr;
|
||||
if (!OHOS::AAFwk::AniEnumConvertUtil::EnumConvert_NativeToEts(env, FORM_DIMENSION_ENUM_NAME,
|
||||
newDimension, newDimensionItem) || newDimensionItem == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::UIABILITY, "newDimensionItem NativeToEts failed");
|
||||
return;
|
||||
}
|
||||
|
||||
ani_object formRectObject = WrapFormRect(env, newRect);
|
||||
if (formRectObject == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "wrap formRectObject failed");
|
||||
return;
|
||||
}
|
||||
|
||||
ani_method function;
|
||||
ani_status status = ANI_ERROR;
|
||||
if ((status = env->Class_FindMethod(
|
||||
etsAbilityObj_->aniCls, "onSizeChanged", FORM_SIZE_CHANGED_NAME, &function))) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "Class_FindMethod status: %{public}d", status);
|
||||
return;
|
||||
}
|
||||
|
||||
status = env->Object_CallMethod_Void(etsAbilityObj_->aniObj, function,
|
||||
formIdStr, newDimensionItem, formRectObject);
|
||||
if (status != ANI_OK) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "Object_CallMethod status : %{public}d", status);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ani_object ETSFormExtension::WrapFormRect(ani_env *env, const Rect &rect)
|
||||
{
|
||||
if (env == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "env nullptr");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
ani_object etsObject = nullptr;
|
||||
if (!CreateObject(env, etsObject, FORM_RECT_NAME)) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "CreateObject failed");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
ani_status status = ANI_ERROR;
|
||||
if ((status = env->Object_SetPropertyByName_Double(etsObject, "left", rect.left)) != ANI_OK) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "status: %{public}d", status);
|
||||
return nullptr;
|
||||
}
|
||||
if ((status = env->Object_SetPropertyByName_Double(etsObject, "top", rect.top)) != ANI_OK) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "status: %{public}d", status);
|
||||
return nullptr;
|
||||
}
|
||||
if ((status = env->Object_SetPropertyByName_Double(etsObject, "width", rect.width)) != ANI_OK) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "status: %{public}d", status);
|
||||
return nullptr;
|
||||
}
|
||||
if ((status = env->Object_SetPropertyByName_Double(etsObject, "height", rect.height)) != ANI_OK) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "status: %{public}d", status);
|
||||
return nullptr;
|
||||
}
|
||||
return etsObject;
|
||||
}
|
||||
|
||||
bool ETSFormExtension::CreateObject(ani_env *env, ani_object &object, const std::string &className)
|
||||
{
|
||||
if (env == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "null env");
|
||||
return false;
|
||||
}
|
||||
ani_status status = ANI_ERROR;
|
||||
ani_class cls = nullptr;
|
||||
if ((status = env->FindClass(className.c_str(), &cls)) != ANI_OK) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "status : %{public}d", status);
|
||||
return false;
|
||||
}
|
||||
if (cls == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "null cls");
|
||||
return false;
|
||||
}
|
||||
ani_method method = nullptr;
|
||||
if ((status = env->Class_FindMethod(cls, "<ctor>", ":", &method)) != ANI_OK) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "status : %{public}d", status);
|
||||
return false;
|
||||
}
|
||||
if (method == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "null method");
|
||||
return false;
|
||||
}
|
||||
if ((status = env->Object_New(cls, method, &object)) != ANI_OK) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "status : %{public}d", status);
|
||||
return false;
|
||||
}
|
||||
if (object == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::FORM_EXT, "null object");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
} // namespace AbilityRuntime
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -67,6 +67,10 @@ export default class FormExtensionAbility {
|
||||
console.log(`FormExtensionAbility onConfigurationUpdate`);
|
||||
}
|
||||
|
||||
onSizeChanged(formId: string, newDimension: formInfo.FormDimension, newRect: formInfo.Rect): void {
|
||||
console.log('FormExtensionAbility onSizeChanged');
|
||||
}
|
||||
|
||||
public onAcquireFormState?: OnAcquireFormStateFn;
|
||||
|
||||
public onStop?: OnStopFn;
|
||||
|
||||
Reference in New Issue
Block a user