diff --git a/frameworks/bridge/declarative_frontend/jsview/js_indexer.cpp b/frameworks/bridge/declarative_frontend/jsview/js_indexer.cpp index 0c49fb7f..15fccc36 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_indexer.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_indexer.cpp @@ -31,36 +31,36 @@ const std::vector ALIGN_STYLE = { V2::AlignStyle::LEFT, V2::Alig void JSIndexer::Create(const JSCallbackInfo& args) { if (args.Length() >= 1 && args[0]->IsObject()) { - JSRef obj = JSRef::Cast(args[0]); + auto param = JsonUtil::ParseJsonString(args[0]->ToString()); + if (!param || param->IsNull()) { + LOGE("JSIndexer::Create param is null"); + return; + } std::vector indexerArray; - JSRef arrayVal = obj->GetProperty("arrayValue"); - if (!arrayVal->IsArray()) { + auto arrayVal = param->GetValue("arrayValue"); + if (!arrayVal || !arrayVal->IsArray()) { LOGW("info is invalid"); return; } - JSRef array = JSRef::Cast(arrayVal); - int32_t length = static_cast(array->Length()); + size_t length = static_cast(arrayVal->GetArraySize()); if (length <= 0) { LOGE("info is invalid"); return; } - for (int32_t i = 0; i < length; i++) { - JSRef value = array->GetValueAt(i); - std::string tmp; - if (ParseJsString(value, tmp)) { - indexerArray.emplace_back(tmp); + for (size_t i = 0; i < length; i++) { + auto value = arrayVal->GetArrayItem(i); + if (!value) { + return; } + indexerArray.emplace_back(value->GetString()); } - JSRef selectedVal = obj->GetProperty("selected"); - if (!selectedVal->IsNumber()) { - LOGE("info is invalid"); - return; - } + auto selectedVal = param->GetInt("selected", 0); + auto indexerComponent = - AceType::MakeRefPtr(indexerArray, selectedVal->ToNumber()); + AceType::MakeRefPtr(indexerArray, selectedVal); ViewStackProcessor::GetInstance()->Push(indexerComponent); JSInteractableView::SetFocusNode(true); args.ReturnSelf(); diff --git a/frameworks/core/components/button/render_button.cpp b/frameworks/core/components/button/render_button.cpp index da327b3b..84d4bda1 100755 --- a/frameworks/core/components/button/render_button.cpp +++ b/frameworks/core/components/button/render_button.cpp @@ -324,7 +324,7 @@ void RenderButton::OnMouseHoverEnterTest() return; } ButtonType type = buttonComponent_->GetType(); - if (isPhone_ && ((type == ButtonType::TEXT) || (type == ButtonType::NORMAL))) { + if ((isPhone_ || isTablet_) && ((type == ButtonType::TEXT) || (type == ButtonType::NORMAL))) { needHoverColor_ = true; MarkNeedRender(); } else { @@ -457,6 +457,7 @@ void RenderButton::Update(const RefPtr& component) isWatch_ = (SystemProperties::GetDeviceType() == DeviceType::WATCH); isTv_ = (SystemProperties::GetDeviceType() == DeviceType::TV); isPhone_ = (SystemProperties::GetDeviceType() == DeviceType::PHONE); + isTablet_ = (SystemProperties::GetDeviceType() == DeviceType::TABLET); auto catchMode = buttonComponent_->GetClickedEventId().IsEmpty() || buttonComponent_->GetClickedEventId().GetCatchMode(); static const int32_t bubbleModeVersion = 6; diff --git a/frameworks/core/components/button/render_button.h b/frameworks/core/components/button/render_button.h index 2f37021f..c87409c9 100644 --- a/frameworks/core/components/button/render_button.h +++ b/frameworks/core/components/button/render_button.h @@ -178,6 +178,7 @@ protected: bool isWatch_ = false; bool isTv_ = false; bool isPhone_ = false; + bool isTablet_ = false; bool widthDefined_ = false; bool heightDefined_ = false; bool progressDisplay_ = false; diff --git a/frameworks/core/components_v2/indexer/indexer_element.h b/frameworks/core/components_v2/indexer/indexer_element.h index d2a6872f..38d6aa08 100644 --- a/frameworks/core/components_v2/indexer/indexer_element.h +++ b/frameworks/core/components_v2/indexer/indexer_element.h @@ -31,6 +31,14 @@ public: bool OnKeyEvent(const KeyEvent& keyEvent) override; bool IndexMoveUp(); bool IndexMoveDown(); + bool CanUpdate(const RefPtr& newComponent) override + { + auto context = context_.Upgrade(); + if (context && context->GetIsDeclarative()) { + return false; + } + return true; + } private: WeakPtr prevFocusedItem_;