diff --git a/frameworks/bridge/declarative_frontend/jsview/js_textpicker.cpp b/frameworks/bridge/declarative_frontend/jsview/js_textpicker.cpp index 474c92c799833ea3b4f903b5224d52ed9631077e..731f1297493ef6b27a4b7d44acff2f2987ee9b6a 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_textpicker.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_textpicker.cpp @@ -432,6 +432,13 @@ void JSTextPicker::Create(const JSCallbackInfo& info) auto paramObject = JSRef::Cast(info[0]); bool optionsMultiContentCheckErr = false; bool optionsCascadeContentCheckErr = false; + auto targetNode = NG::ViewStackProcessor::GetInstance()->GetMainFrameNode(); + bool firstBuild = targetNode && targetNode->IsFirstBuilding(); + auto getRange = paramObject->GetProperty("range"); + if ((getRange->IsNull() || getRange->IsUndefined()) && !firstBuild) { + return; + } + auto isSingleRange = ProcessSingleRangeValue(paramObject, param); TextPickerModel::GetInstance()->SetSingleRange(isSingleRange); if (!isSingleRange) { @@ -447,8 +454,6 @@ void JSTextPicker::Create(const JSCallbackInfo& info) if (!isSingleRange && optionsMultiContentCheckErr && optionsCascadeContentCheckErr) { param.result.clear(); param.options.clear(); - auto targetNode = NG::ViewStackProcessor::GetInstance()->GetMainFrameNode(); - bool firstBuild = targetNode && targetNode->IsFirstBuilding(); if (!firstBuild) { return; } @@ -474,21 +479,13 @@ void JSTextPicker::Create(const JSCallbackInfo& info) bool JSTextPicker::ProcessSingleRangeValue(const JSRef& paramObjec, ParseTextArrayParam& param) { - bool ret = true; - auto getRange = paramObjec->GetProperty("range"); - if (getRange->IsNull() || getRange->IsUndefined()) { - if (TextPickerModel::GetInstance()->GetSingleRange()) { - return ret; - } - return false; - } if (!JSTextPickerParser::ParseTextArray(paramObjec, param)) { if (!JSTextPickerParser::ParseIconTextArray(paramObjec, param)) { param.result.clear(); - ret = false; + return false; } } - return ret; + return true; } bool JSTextPicker::ProcessCascadeOptions(const JSRef& paramObject, ParseTextArrayParam& param, @@ -914,51 +911,52 @@ bool JSTextPickerParser::ParseTextArray(const JSRef& paramObject, Pars { auto getSelected = paramObject->GetProperty("selected"); auto getValue = paramObject->GetProperty("value"); - JSRef getRange = paramObject->GetProperty("range"); + auto range = paramObject->GetProperty("range"); + if (range->IsNull() || range->IsUndefined()) return true; + + JSRef getRange = JSRef::Cast(range); + if (getRange->Length() == 0) return true; + std::vector getRangeVector; - if (getRange->Length() > 0) { - if (!ParseJsStrArray(getRange, getRangeVector)) { - return false; - } - param.result.clear(); - for (const auto& text : getRangeVector) { - NG::RangeContent content; - content.icon_ = ""; - content.text_ = text; - param.result.emplace_back(content); - } - param.kind = NG::TEXT; - if (getValue->IsObject()) { - JSRef valueObj = JSRef::Cast(getValue); - param.valueChangeEventVal = valueObj->GetProperty("changeEvent"); - if (param.valueChangeEventVal->IsFunction()) { - getValue = valueObj->GetProperty("value"); - } - } - if (!ParseJsString(getValue, param.value, param.valueResObj)) { - param.value = getRangeVector.front(); - } - if (getSelected->IsObject()) { - JSRef selectedObj = JSRef::Cast(getSelected); - param.selectedChangeEventVal = selectedObj->GetProperty("changeEvent"); - if (param.selectedChangeEventVal->IsFunction()) { - getSelected = selectedObj->GetProperty("value"); - } - } - if (!ParseJsInteger(getSelected, param.selected) && !param.value.empty()) { - auto valueIterator = std::find(getRangeVector.begin(), getRangeVector.end(), param.value); - if (valueIterator != getRangeVector.end()) { - param.selected = static_cast(std::distance(getRangeVector.begin(), valueIterator)); - } + if (!ParseJsStrArray(getRange, getRangeVector)) { + return false; + } + + param.result.clear(); + for (const auto& text : getRangeVector) { + NG::RangeContent content; + content.icon_ = ""; + content.text_ = text; + param.result.emplace_back(content); + } + param.kind = NG::TEXT; + if (getValue->IsObject()) { + JSRef valueObj = JSRef::Cast(getValue); + param.valueChangeEventVal = valueObj->GetProperty("changeEvent"); + if (param.valueChangeEventVal->IsFunction()) { + getValue = valueObj->GetProperty("value"); } - if (param.selected >= getRangeVector.size()) { - param.selected = 0; + } + if (!ParseJsString(getValue, param.value, param.valueResObj)) { + param.value = getRangeVector.front(); + } + if (getSelected->IsObject()) { + JSRef selectedObj = JSRef::Cast(getSelected); + param.selectedChangeEventVal = selectedObj->GetProperty("changeEvent"); + if (param.selectedChangeEventVal->IsFunction()) { + getSelected = selectedObj->GetProperty("value"); } - if (!ParseColumnWidths(paramObject, param)) { - return false; + } + if (!ParseJsInteger(getSelected, param.selected) && !param.value.empty()) { + auto valueIterator = std::find(getRangeVector.begin(), getRangeVector.end(), param.value); + if (valueIterator != getRangeVector.end()) { + param.selected = static_cast(std::distance(getRangeVector.begin(), valueIterator)); } } - return true; + if (param.selected >= getRangeVector.size()) { + param.selected = 0; + } + return ParseColumnWidths(paramObject, param); } bool JSTextPickerParser::ParseIconTextArray(const JSRef& paramObject, ParseTextArrayParam& param) diff --git a/frameworks/bridge/declarative_frontend/jsview/models/textpicker_model_impl.cpp b/frameworks/bridge/declarative_frontend/jsview/models/textpicker_model_impl.cpp index 539552dfe62918c088ab12b4d6070d2df597205c..c36cb2fd7617cbb32ff64cf2059ddfd13449de6b 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/textpicker_model_impl.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/models/textpicker_model_impl.cpp @@ -19,7 +19,7 @@ #include "core/components/picker/picker_text_component.h" namespace OHOS::Ace::Framework { -void TextPickerModelImpl::Create(RefPtr pickerTheme, uint32_t columnKind) +void TextPickerModelImpl::Create(RefPtr pickerTheme, uint8_t columnKind) { (void)columnKind; auto textPicker = AceType::MakeRefPtr(); diff --git a/frameworks/bridge/declarative_frontend/jsview/models/textpicker_model_impl.h b/frameworks/bridge/declarative_frontend/jsview/models/textpicker_model_impl.h index 93425b9f021dc36186ad27c42dab527a8005a98e..d154ed05a617ed7c735d93d122bdf619986494ef 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/textpicker_model_impl.h +++ b/frameworks/bridge/declarative_frontend/jsview/models/textpicker_model_impl.h @@ -25,7 +25,7 @@ public: TextPickerModelImpl() = default; ~TextPickerModelImpl() override = default; - void Create(RefPtr pickerTheme, uint32_t columnKind) override; + void Create(RefPtr pickerTheme, uint8_t columnKind) override; void SetSelected(uint32_t value) override; void SetRange(const std::vector& value) override; void SetValue(const std::string& value) override {} diff --git a/frameworks/core/components_ng/pattern/picker/picker_type_define.h b/frameworks/core/components_ng/pattern/picker/picker_type_define.h index 61dff12cdac2415ecaa2f9f61e2fe3a530665934..641fd4e56d7e464805309bc2374f313ba42b9acf 100644 --- a/frameworks/core/components_ng/pattern/picker/picker_type_define.h +++ b/frameworks/core/components_ng/pattern/picker/picker_type_define.h @@ -87,9 +87,9 @@ struct PickerBackgroundStyle { }; // textpicker column kind -const uint32_t ICON = 0x01; -const uint32_t TEXT = 0x02; -const uint32_t MIXTURE = 0x03; +const uint8_t ICON = 0x01; +const uint8_t TEXT = 0x02; +const uint8_t MIXTURE = 0x03; struct RangeContent { std::string icon_; @@ -132,21 +132,21 @@ struct DatePickerSettingData { }; struct TextPickerSettingData { - std::vector rangeVector; - uint32_t selected; - uint32_t columnKind; - Dimension height; bool canLoop = true; + bool isDisableTextStyleAnimation = false; + bool isEnableHapticFeedback = true; + uint8_t columnKind; + uint32_t selected; int32_t crownSensitivity; - PickerTextProperties properties; - PickerBackgroundStyle pickerBgStyle; + Dimension height; + std::vector rangeVector; std::vector selectedValues; std::vector values; std::vector options; - NG::TextCascadePickerOptionsAttr attr; - bool isDisableTextStyleAnimation = false; - bool isEnableHapticFeedback = true; std::vector columnWidths; + PickerTextProperties properties; + PickerBackgroundStyle pickerBgStyle; + NG::TextCascadePickerOptionsAttr attr; }; struct TimePickerSettingData { diff --git a/frameworks/core/components_ng/pattern/text_picker/textpicker_column_pattern.h b/frameworks/core/components_ng/pattern/text_picker/textpicker_column_pattern.h index f4b09af780cb2a9f99c622e2d93c9f65f967639f..d46f18552a8f010de59f878dcbfdbdd90508b25d 100644 --- a/frameworks/core/components_ng/pattern/text_picker/textpicker_column_pattern.h +++ b/frameworks/core/components_ng/pattern/text_picker/textpicker_column_pattern.h @@ -211,7 +211,7 @@ public: options_.clear(); } - void SetColumnKind(int32_t kind) + void SetColumnKind(uint8_t kind) { columnKind_ = kind; } @@ -577,7 +577,7 @@ private: std::vector range_ { "" }; uint32_t currentIndex_ = 0; std::vector options_; - int32_t columnKind_ = TEXT; + uint8_t columnKind_ = TEXT; int32_t currentChildIndex_ = 0; float deltaSize_ = 0.0f; double totalDragDelta_ = 0.0; diff --git a/frameworks/core/components_ng/pattern/text_picker/textpicker_model.h b/frameworks/core/components_ng/pattern/text_picker/textpicker_model.h index 550b970a17b121cf1218686a0fe044cb30326942..68c8cecbb04ee2feaedb52e73165cb4f4bad2fc3 100644 --- a/frameworks/core/components_ng/pattern/text_picker/textpicker_model.h +++ b/frameworks/core/components_ng/pattern/text_picker/textpicker_model.h @@ -58,7 +58,7 @@ public: static TextPickerModel* GetInstance(); virtual ~TextPickerModel() = default; - virtual void Create(RefPtr pickerTheme, uint32_t columnKind) = 0; + virtual void Create(RefPtr pickerTheme, uint8_t columnKind) = 0; virtual void SetSelected(uint32_t value) = 0; virtual void SetRange(const std::vector& value) = 0; virtual void SetValue(const std::string& value) = 0; diff --git a/frameworks/core/components_ng/pattern/text_picker/textpicker_model_ng.cpp b/frameworks/core/components_ng/pattern/text_picker/textpicker_model_ng.cpp index ff7f47de414895a8939e50edf46a8b3f6c1c2e12..54617c71b2881a898528b7da1b03381cb90bbc3b 100644 --- a/frameworks/core/components_ng/pattern/text_picker/textpicker_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/text_picker/textpicker_model_ng.cpp @@ -96,7 +96,7 @@ void ResetTextPickerTextStyleColor(FrameNode* frameNode, TextPickerGetTextStyleF } } -void TextPickerModelNG::Create(RefPtr pickerTheme, uint32_t columnKind) +void TextPickerModelNG::Create(RefPtr pickerTheme, uint8_t columnKind) { auto* stack = ViewStackProcessor::GetInstance(); auto nodeId = stack->ClaimNodeId(); @@ -112,10 +112,9 @@ void TextPickerModelNG::Create(RefPtr pickerTheme, uint32_t columnK CHECK_NULL_VOID(dialogTheme); textPickerPattern->SetBackgroundColor(dialogTheme->GetBackgroundColor()); CHECK_NULL_VOID(pickerTheme); - uint32_t showCount = pickerTheme->GetShowOptionCount() + BUFFER_NODE_NUMBER; if (textPickerNode->GetChildren().empty()) { - auto columnNode = CreateColumnNode(columnKind, showCount); + auto columnNode = CreateColumnNode(columnKind, GetShowCount(pickerTheme)); auto stackNode = CreateStackNode(); auto buttonNode = CreateButtonNode(); auto columnBlendNode = CreateColumnNode(); @@ -252,8 +251,6 @@ RefPtr TextPickerModelNG::CreateFrameNode(int32_t nodeId) CHECK_NULL_RETURN(pipeline, textPickerNode); auto pickerTheme = pipeline->GetTheme(textPickerNode->GetThemeScopeId()); CHECK_NULL_RETURN(pickerTheme, textPickerNode); - std::lock_guard lock(showCountMutex_); - showCount_ = BUFFER_NODE_NUMBER + pickerTheme->GetShowOptionCount(); SetDefaultAttributes(textPickerNode, pickerTheme); return textPickerNode; } @@ -667,8 +664,6 @@ void TextPickerModelNG::MultiInit(const RefPtr pickerTheme) auto textPickerPattern = textPickerNode->GetPattern(); CHECK_NULL_VOID(pickerTheme); - std::lock_guard lock(showCountMutex_); - showCount_ = pickerTheme->GetShowOptionCount() + BUFFER_NODE_NUMBER; stack->Push(textPickerNode); if (pickerTheme->IsCircleDial()) { @@ -700,9 +695,9 @@ void TextPickerModelNG::SetUnCascadeColumns(const std::vectorGetMainFrameNode(); CHECK_NULL_VOID(frameNode); if (frameNode->GetChildren().empty()) { - std::lock_guard lock(showCountMutex_); + auto showCount = GetShowCount(); for (uint32_t i = 0; i < options.size(); i++) { - auto columnNode = CreateColumnNode(NG::TEXT, showCount_); + auto columnNode = CreateColumnNode(NG::TEXT, showCount); auto stackNode = CreateStackNode(); auto buttonNode = CreateButtonNode(); auto columnBlendNode = CreateColumnNode(); @@ -740,9 +735,9 @@ void TextPickerModelNG::SetCascadeColumns(const std::vectorGetChildren().empty()) { - std::lock_guard lock(showCountMutex_); + auto showCount = GetShowCount(); for (size_t i = 0; i < columnCount; i++) { - auto columnNode = CreateColumnNode(NG::TEXT, showCount_); + auto columnNode = CreateColumnNode(NG::TEXT, showCount); auto stackNode = CreateStackNode(); auto buttonNode = CreateButtonNode(); auto columnBlendNode = CreateColumnNode(); @@ -1025,12 +1020,11 @@ void TextPickerModelNG::SetIsCascade(FrameNode* frameNode, bool isCascade) textPickerPattern->SetIsCascade(isCascade); } -void TextPickerModelNG::SetColumnKind(FrameNode* frameNode, uint32_t columnKind) +void TextPickerModelNG::SetColumnKind(FrameNode* frameNode, uint8_t columnKind) { CHECK_NULL_VOID(frameNode); auto textPickerPattern = frameNode->GetPattern(); CHECK_NULL_VOID(textPickerPattern); - columnKind_ = columnKind; textPickerPattern->SetColumnsKind(columnKind); } @@ -1203,12 +1197,13 @@ void TextPickerModelNG::SetRange(FrameNode* frameNode, const std::vectorGetChildren().empty()) { - std::lock_guard lock(showCountMutex_); RefPtr columnNode = nullptr; - if (columnKind_ == TEXT) { - columnNode = CreateColumnNode(TEXT, showCount_); - } else if (columnKind_ == MIXTURE) { - columnNode = CreateColumnNode(MIXTURE, showCount_); + uint8_t columnKind = GetColumnsKind(frameNode); + uint32_t showCount = GetShowCount(frameNode); + if (columnKind == TEXT) { + columnNode = CreateColumnNode(TEXT, showCount); + } else if (columnKind == MIXTURE) { + columnNode = CreateColumnNode(MIXTURE, showCount); } auto stackNode = CreateStackNode(); auto buttonNode = CreateButtonNode(); @@ -1240,9 +1235,8 @@ void TextPickerModelNG::SetUnCascadeColumnsNode(FrameNode* frameNode, { CHECK_NULL_VOID(frameNode); if (frameNode->GetChildren().empty()) { - std::lock_guard lock(showCountMutex_); for (uint32_t i = 0; i < options.size(); i++) { - auto columnNode = CreateColumnNode(TEXT, showCount_); + auto columnNode = CreateColumnNode(TEXT, GetShowCount(frameNode)); auto stackNode = CreateStackNode(); auto buttonNode = CreateButtonNode(); auto columnBlendNode = CreateColumnNode(); @@ -1280,9 +1274,8 @@ void TextPickerModelNG::SetCascadeColumnsNode(FrameNode* frameNode, // Create Node if (frameNode->GetChildren().empty()) { - std::lock_guard lock(showCountMutex_); for (size_t i = 0; i < columnCount; i++) { - auto columnNode = CreateColumnNode(NG::TEXT, showCount_); + auto columnNode = CreateColumnNode(NG::TEXT, GetShowCount(frameNode)); auto stackNode = CreateStackNode(); auto buttonNode = CreateButtonNode(); auto columnBlendNode = CreateColumnNode(); @@ -1669,15 +1662,34 @@ bool TextPickerModelNG::IsCascade() return textPickerPattern->GetIsCascade(); } -void TextPickerModelNG::SetSingleRange(bool isSingleRange) +void TextPickerModelNG::SetSingleRange(const bool isSingleRange) +{ + auto textPickerPattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(); + CHECK_NULL_VOID(textPickerPattern); + textPickerPattern->SetSingleRange(isSingleRange); +} + +bool TextPickerModelNG::GetSingleRange() +{ + auto textPickerPattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(); + CHECK_NULL_RETURN(textPickerPattern, true); + return textPickerPattern->GetSingleRange(); +} + +void TextPickerModelNG::SetTextPickerSingleRange(FrameNode* frameNode, const bool isSingleRange) { - std::lock_guard lock(isSingleMutex_); - isSingleRange_ = isSingleRange; - auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); CHECK_NULL_VOID(frameNode); auto textPickerPattern = frameNode->GetPattern(); CHECK_NULL_VOID(textPickerPattern); - textPickerPattern->SetSingleRange(isSingleRange); + return textPickerPattern->SetSingleRange(isSingleRange); +} + +bool TextPickerModelNG::GetTextPickerSingleRange(FrameNode* frameNode) +{ + CHECK_NULL_RETURN(frameNode, true); + auto textPickerPattern = frameNode->GetPattern(); + CHECK_NULL_RETURN(textPickerPattern, true); + return textPickerPattern->GetSingleRange(); } void TextPickerModelNG::UpdateUserSetSelectColor() @@ -2151,4 +2163,33 @@ void TextPickerModelNG::ParseBackgroundStyleRadiusResObj(FrameNode* frameNode, c textPickerPattern->AddResObj("TextPicker.BackgroundStyle.borderRadius", resObj, std::move(updateRadiusFunc)); } +uint32_t TextPickerModelNG::GetShowCount(RefPtr pickerTheme) +{ + if (!pickerTheme) { + auto pipeline = PipelineBase::GetCurrentContextSafely(); + CHECK_NULL_RETURN(pipeline, 0); + pickerTheme = pipeline->GetTheme(); + CHECK_NULL_RETURN(pickerTheme, 0); + } + return pickerTheme->GetShowOptionCount() + BUFFER_NODE_NUMBER; +} + +uint32_t TextPickerModelNG::GetShowCount(FrameNode* frameNode) +{ + CHECK_NULL_RETURN(frameNode, 0); + auto context = frameNode->GetContext(); + CHECK_NULL_RETURN(context, 0); + auto pickerTheme = context->GetTheme(); + CHECK_NULL_RETURN(pickerTheme, 0); + return pickerTheme->GetShowOptionCount() + BUFFER_NODE_NUMBER; +} + +uint8_t TextPickerModelNG::GetColumnsKind(FrameNode* frameNode) +{ + CHECK_NULL_RETURN(frameNode, TEXT); + auto textPickerPattern = frameNode->GetPattern(); + CHECK_NULL_RETURN(textPickerPattern, TEXT); + return textPickerPattern->GetColumnsKind(); +} + } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/text_picker/textpicker_model_ng.h b/frameworks/core/components_ng/pattern/text_picker/textpicker_model_ng.h index 9e89e945240bfe1ad8af4c3ec665e07404edfa34..b0e7980821ef18979637c27883322d4c48ed24e1 100644 --- a/frameworks/core/components_ng/pattern/text_picker/textpicker_model_ng.h +++ b/frameworks/core/components_ng/pattern/text_picker/textpicker_model_ng.h @@ -27,7 +27,7 @@ namespace OHOS::Ace::NG { class ACE_FORCE_EXPORT TextPickerModelNG : public TextPickerModel { public: - void Create(RefPtr pickerTheme, uint32_t columnKind) override; + void Create(RefPtr pickerTheme, uint8_t columnKind) override; void SetSelected(uint32_t value) override; void SetRange(const std::vector& value) override; void SetValue(const std::string& value) override; @@ -65,24 +65,10 @@ public: return maxCount_; } - void SetSingleRange(bool isSingleRange) override; - bool GetSingleRange() override - { - std::lock_guard lock(isSingleMutex_); - return isSingleRange_; - } - - static void SetTextPickerSingeRange(bool isSingleRange) - { - std::lock_guard lock(isSingleMutex_); - isSingleRange_ = isSingleRange; - } - - static bool GetTextPickerSingeRange() - { - std::lock_guard lock(isSingleMutex_); - return isSingleRange_; - } + void SetSingleRange(const bool isSingleRange) override; + bool GetSingleRange() override; + static void SetTextPickerSingleRange(FrameNode* frameNode, const bool isSingleRange); + static bool GetTextPickerSingleRange(FrameNode* frameNode); void SetHasSelectAttr(bool value) override; bool GetMultiOptions(std::vector& options) override; @@ -111,7 +97,7 @@ public: static void SetSelecteds(FrameNode* frameNode, const std::vector& values); static void SetHasSelectAttr(FrameNode* frameNode, bool value); static void SetIsCascade(FrameNode* frameNode, bool isCascade); - static void SetColumnKind(FrameNode* frameNode, uint32_t columnKind); + static void SetColumnKind(FrameNode* frameNode, uint8_t columnKind); static void SetNormalTextStyle( FrameNode* frameNode, const RefPtr& pickerTheme, const NG::PickerTextStyle& value); static void SetSelectedTextStyle( @@ -166,6 +152,9 @@ public: private: void SetUnCascadeColumns(const std::vector& options); void SetCascadeColumns(const std::vector& options); + uint32_t GetShowCount(RefPtr pickerTheme = nullptr); + static uint32_t GetShowCount(FrameNode* frameNode); + static uint8_t GetColumnsKind(FrameNode* frameNode); static RefPtr CreateStackNode(); static RefPtr CreateColumnNode(); @@ -183,12 +172,6 @@ private: static void ParseBackgroundStyleRadiusResObj(FrameNode* frameNode, const NG::PickerBackgroundStyle& value); uint32_t maxCount_ = 0; - std::vector kinds_; - static inline bool isSingleRange_ = true; - static inline uint32_t showCount_ = 0; - static inline std::shared_mutex showCountMutex_; - static inline std::shared_mutex isSingleMutex_; - static inline uint32_t columnKind_ = TEXT; }; class ACE_EXPORT TextPickerDialogModelNG : public TextPickerDialogModel { diff --git a/frameworks/core/components_ng/pattern/text_picker/textpicker_pattern.cpp b/frameworks/core/components_ng/pattern/text_picker/textpicker_pattern.cpp index 29d4375e1f559b821019c47ca88e9607f1e032a8..f783925a6ce1301ea734c88c49958ed0db702986 100644 --- a/frameworks/core/components_ng/pattern/text_picker/textpicker_pattern.cpp +++ b/frameworks/core/components_ng/pattern/text_picker/textpicker_pattern.cpp @@ -999,7 +999,7 @@ void TextPickerPattern::SetSelecteds(const std::vector& values) if (isCascade_) { auto columnCount = cascadeOptions_.size(); cascadeOptions_.clear(); - ProcessCascadeOptions(cascadeOriginptions_, cascadeOptions_, 0); + ProcessCascadeOptions(cascadeOriginOptions_, cascadeOptions_, 0); if (cascadeOptions_.size() < columnCount) { auto differ = columnCount - cascadeOptions_.size(); for (uint32_t i = 0; i < differ; i++) { @@ -1368,24 +1368,24 @@ void TextPickerPattern::HandleColumnChange(const RefPtr& tag, bool is } columnIndex++; } - for (uint32_t valueIndex = 0; valueIndex < cascadeOriginptions_.size(); valueIndex++) { - ChangeCurrentOptionValue(cascadeOriginptions_[valueIndex], index, 0, columnIndex); + for (uint32_t valueIndex = 0; valueIndex < cascadeOriginOptions_.size(); valueIndex++) { + ChangeCurrentOptionValue(cascadeOriginOptions_[valueIndex], index, 0, columnIndex); } - std::vector reOptions; - ProcessCascadeOptions(cascadeOriginptions_, reOptions, 0); + cascadeOptions_.clear(); + ProcessCascadeOptions(cascadeOriginOptions_, cascadeOptions_, 0); // Next Column Update Value - columnIndex = columnIndex + 1; + columnIndex += 1; for (uint32_t patterIndex = columnIndex; patterIndex < frameNodes.size(); patterIndex++) { auto patternNode = frameNodes[patterIndex]; CHECK_NULL_VOID(patternNode); auto textPickerColumnPattern = patternNode->GetPattern(); CHECK_NULL_VOID(textPickerColumnPattern); - if (patterIndex < reOptions.size()) { - auto currentSelectedIndex = reOptions[patterIndex].rangeResult.empty() ? 0 : - selecteds_[patterIndex] % reOptions[patterIndex].rangeResult.size(); + if (patterIndex < cascadeOptions_.size()) { + auto currentSelectedIndex = cascadeOptions_[patterIndex].rangeResult.empty() ? 0 : + selecteds_[patterIndex] % cascadeOptions_[patterIndex].rangeResult.size(); std::vector rangeContents; - SupplementOption(reOptions, rangeContents, patterIndex); + SupplementOption(cascadeOptions_, rangeContents, patterIndex); textPickerColumnPattern->SetCurrentIndex(currentSelectedIndex); textPickerColumnPattern->SetOptions(rangeContents); textPickerColumnPattern->HandleAccessibilityTextChange(); @@ -1563,11 +1563,11 @@ void TextPickerPattern::ToJsonValue(std::unique_ptr& json, const Insp if (!range_.empty()) { json->PutExtAttr("range", GetRangeStr().c_str(), filter); } else { - if (!cascadeOriginptions_.empty()) { + if (!cascadeOriginOptions_.empty()) { if (!isCascade_) { json->PutExtAttr("range", GetOptionsMultiStr().c_str(), filter); } else { - json->PutExtAttr("range", GetOptionsCascadeStr(cascadeOriginptions_).c_str(), filter); + json->PutExtAttr("range", GetOptionsCascadeStr(cascadeOriginOptions_).c_str(), filter); } } } @@ -1935,7 +1935,7 @@ std::string TextPickerPattern::GetTextPickerRange() const result = result.substr(0, result.length() > 0 ? result.length() - 1 : 0); } } else { - for (auto option : cascadeOriginptions_) { + for (auto option : cascadeOriginOptions_) { for (auto range : option.rangeResult) { result.append(range + ","); } diff --git a/frameworks/core/components_ng/pattern/text_picker/textpicker_pattern.h b/frameworks/core/components_ng/pattern/text_picker/textpicker_pattern.h index e55127efa8c07eb67e3598dd6f364ad762049c17..aba34ebbbd5d9cd226afc3d2679a96a1343d311e 100644 --- a/frameworks/core/components_ng/pattern/text_picker/textpicker_pattern.h +++ b/frameworks/core/components_ng/pattern/text_picker/textpicker_pattern.h @@ -116,17 +116,17 @@ public: uint32_t GetShowOptionCount() const; - void SetSelected(uint32_t value) + inline void SetSelected(uint32_t value) { selectedIndex_ = value; } - uint32_t GetSelected() const + inline uint32_t GetSelected() const { return selectedIndex_; } - void SetRange(const std::vector& value) + inline void SetRange(const std::vector& value) { if (value.empty()) { return; @@ -134,12 +134,12 @@ public: range_ = value; } - std::vector GetRange() const + inline std::vector GetRange() const { return range_; } - void SetColumnWidths(const std::vector& widths) + inline void SetColumnWidths(const std::vector& widths) { columnWidths_.clear(); for (size_t i = 0; i < widths.size(); i++) { @@ -147,39 +147,44 @@ public: } } - std::vector GetColumnWidths() const + inline std::vector GetColumnWidths() const { return columnWidths_; } - std::vector GetMultiOptions() const + inline std::vector GetMultiOptions() const { - return cascadeOriginptions_; + return cascadeOriginOptions_; } - void SetColumnsKind(uint32_t columnKind) + inline void SetColumnsKind(uint32_t columnKind) { columnsKind_ = columnKind; } - void ClearOption() + inline uint8_t GetColumnsKind() + { + return columnsKind_; + } + + inline void ClearOption() { options_.clear(); } - void AppendOption(const NG::RangeContent& value) + inline void AppendOption(const NG::RangeContent& value) { options_.emplace_back(value); } - uint32_t GetOptionCount() const + inline uint32_t GetOptionCount() const { return options_.size(); } std::string GetSelectedObject(bool isColumnChange, int32_t status = 0, bool isEnterSelectedAreaEvent = false) const; - std::string GetOption(uint32_t index) const + inline std::string GetOption(uint32_t index) const { if (index >= GetOptionCount()) { return ""; @@ -198,7 +203,7 @@ public: host->MarkDirtyNode(PROPERTY_UPDATE_RENDER); } - Color GetBackgroundColor() + inline Color GetBackgroundColor() { return backgroundColor_; } @@ -223,21 +228,21 @@ public: const std::vector& cascadeOptions) { cascadeOptions_.clear(); - cascadeOriginptions_.clear(); + cascadeOriginOptions_.clear(); for (auto& option : cascadeOptions) { cascadeOptions_.emplace_back(std::move(option)); } for (auto& option : options) { - cascadeOriginptions_.emplace_back(std::move(option)); + cascadeOriginOptions_.emplace_back(std::move(option)); } } - uint32_t GetCascadeOptionCount() const + inline uint32_t GetCascadeOptionCount() const { return cascadeOptions_.size(); } - uint32_t GetOptionCount(const RefPtr& frmeNode) + inline uint32_t GetOptionCount(const RefPtr& frmeNode) { uint32_t count = 0; auto it = optionsWithNode_.find(frmeNode); @@ -247,12 +252,12 @@ public: return count; } - void SetIsCascade(bool isCascade) + inline void SetIsCascade(bool isCascade) { isCascade_ = isCascade; } - bool GetIsCascade() const + inline bool GetIsCascade() const { return isCascade_; } @@ -281,7 +286,7 @@ public: void OnFontConfigurationUpdate() override; void OnFontScaleConfigurationUpdate() override; - void SetValues(const std::vector& values) + inline void SetValues(const std::vector& values) { values_.clear(); for (auto& value : values) { @@ -289,57 +294,57 @@ public: } } - const std::vector& GetValues() + inline const std::vector& GetValues() { return values_; } - const std::vector& GetSelecteds() + inline const std::vector& GetSelecteds() { return selecteds_; } - void SetHasSelectAttr(bool value) + inline void SetHasSelectAttr(bool value) { isHasSelectAttr_ = value; } - bool GetHasSelectAttr() + inline bool GetHasSelectAttr() { return isHasSelectAttr_; } - void SetResizePickerItemHeight(double resizePickerItemHeight) + inline void SetResizePickerItemHeight(double resizePickerItemHeight) { resizePickerItemHeight_ = resizePickerItemHeight; } - double GetResizePickerItemHeight() const + inline double GetResizePickerItemHeight() const { return resizePickerItemHeight_; } - void SetResizeFlag(bool resizeFlag) + inline void SetResizeFlag(bool resizeFlag) { resizeFlag_ = resizeFlag; } - bool GetResizeFlag() const + inline bool GetResizeFlag() const { return resizeFlag_; } - void SetIsShowInDialog(bool isShowInDialog) + inline void SetIsShowInDialog(bool isShowInDialog) { isShowInDialog_ = isShowInDialog; } - bool GetIsShowInDialog() const + inline bool GetIsShowInDialog() const { return isShowInDialog_; } - double GetDefaultPickerItemHeight() const + inline double GetDefaultPickerItemHeight() const { return defaultPickerItemHeight_; } @@ -366,7 +371,7 @@ public: contentRowNode_ = contentRowNode; } - void SetPickerTag(bool isPicker) + inline void SetPickerTag(bool isPicker) { isPicker_ = isPicker; } @@ -384,12 +389,12 @@ public: return divider_; } - void SetCustomDividerFlag(bool customDividerFlag) + inline void SetCustomDividerFlag(bool customDividerFlag) { customDividerFlag_ = customDividerFlag; } - bool GetCustomDividerFlag() + inline bool GetCustomDividerFlag() { return customDividerFlag_; } @@ -406,7 +411,7 @@ public: void SetCanLoop(bool isLoop); void SetDigitalCrownSensitivity(int32_t crownSensitivity); - bool GetCanLoop() + inline bool GetCanLoop() { return canloop_; } @@ -441,12 +446,12 @@ public: return hasUserDefinedSelectedFontFamily_; } - void SetRangeType(int32_t rangeType) + inline void SetRangeType(int32_t rangeType) { rangeType_ = rangeType; } - int32_t GetRangeType() + inline int32_t GetRangeType() { return rangeType_; } @@ -480,12 +485,12 @@ public: } } - bool GetIsUserSetDividerSpacingFont() + inline bool GetIsUserSetDividerSpacingFont() { return isUserSetDividerSpacingFont_; } - bool GetIsUserSetGradientFont() + inline bool GetIsUserSetGradientFont() { return isUserSetGradientFont_; } @@ -500,29 +505,29 @@ public: return gradientHeight_; } - void SetPaintDividerSpacing(float& value) + inline void SetPaintDividerSpacing(float& value) { paintDividerSpacing_ = value; } - float GetPaintDividerSpacing() + inline float GetPaintDividerSpacing() { return paintDividerSpacing_; } - void SetUserDefinedOpacity(double opacity) + inline void SetUserDefinedOpacity(double opacity) { curOpacity_ = opacity; } void SetDisableTextStyleAnimation(bool isDisableTextStyleAnimation); - bool GetDisableTextStyleAnimation() const + inline bool GetDisableTextStyleAnimation() const { return isDisableTextStyleAnimation_; } - void SetIsEnableHaptic(bool isEnableHapticFeedback) + inline void SetIsEnableHaptic(bool isEnableHapticFeedback) { if (isEnableHaptic_ != isEnableHapticFeedback) { isHapticChanged_ = true; @@ -530,7 +535,7 @@ public: isEnableHaptic_ = isEnableHapticFeedback; } - bool GetIsEnableHaptic() const + inline bool GetIsEnableHaptic() const { return isEnableHaptic_; } @@ -538,10 +543,14 @@ public: void ColumnPatternInitHapticController(); void UpdateUserSetSelectColor(); std::string GetTextPickerRange() const; - inline void SetSingleRange(bool isSingleRange) + inline void SetSingleRange(const bool isSingleRange) { isSingleRange_ = isSingleRange; } + inline bool GetSingleRange() + { + return isSingleRange_; + } void UpdateDisappearTextStyle(const PickerTextStyle& textStyle); void UpdateNormalTextStyle(const PickerTextStyle& textStyle); @@ -658,7 +667,7 @@ private: uint32_t columnsKind_ = 0; std::vector cascadeOptions_; std::map, std::vector> optionsWithNode_; - std::vector cascadeOriginptions_; + std::vector cascadeOriginOptions_; bool isCascade_ = false; bool isHasSelectAttr_ = false; WeakPtr weakButtonConfirm_; @@ -702,8 +711,8 @@ private: bool isDisableTextStyleAnimation_ = false; bool isEnableHaptic_ = true; bool isHapticChanged_ = false; - int32_t selectedColumnId_ = INVALID_SELECTED_COLUMN_INDEX; bool isSingleRange_ = true; + int32_t selectedColumnId_ = INVALID_SELECTED_COLUMN_INDEX; }; } // namespace OHOS::Ace::NG diff --git a/frameworks/core/interfaces/native/implementation/text_picker_modifier.cpp b/frameworks/core/interfaces/native/implementation/text_picker_modifier.cpp index 184168d9f25c56dfafe2022a34f457762aa43a84..0ef11144f4654d08057f875784e1b5583c753a0f 100644 --- a/frameworks/core/interfaces/native/implementation/text_picker_modifier.cpp +++ b/frameworks/core/interfaces/native/implementation/text_picker_modifier.cpp @@ -361,7 +361,7 @@ void SetTextPickerOptionsImpl(Ark_NativePointer node, if (!textPickerOptions.range.empty()) { ValidateSingleTextPickerOptions(textPickerOptions); //do not change the order of calls - TextPickerModelNG::SetTextPickerSingeRange(true); + TextPickerModelNG::SetTextPickerSingleRange(frameNode, true); // TextPickerModelNG::InitialSetupSinglePicker(frameNode, textPickerOptions.kind); TextPickerModelNG::SetRange(frameNode, textPickerOptions.range); TextPickerModelNG::SetValue(frameNode, textPickerOptions.value); @@ -369,7 +369,7 @@ void SetTextPickerOptionsImpl(Ark_NativePointer node, } else if (!textPickerOptions.options.empty()) { ValidateMultiTextPickerOptions(textPickerOptions); //do not change the order of calls - TextPickerModelNG::SetTextPickerSingeRange(false); + TextPickerModelNG::SetTextPickerSingleRange(frameNode, false); TextPickerModelNG::SetIsCascade(frameNode, textPickerOptions.isCascade); TextPickerModelNG::SetHasSelectAttr(frameNode, textPickerOptions.hasSelected); TextPickerModelNG::SetColumns(frameNode, textPickerOptions.options); diff --git a/frameworks/core/interfaces/native/node/node_textpicker_modifier.cpp b/frameworks/core/interfaces/native/node/node_textpicker_modifier.cpp index 23145651af0761dfed20d61fe2c36ab297e4e0ff..d8d6102966fb3896e9f7418577f96b84532a0626 100644 --- a/frameworks/core/interfaces/native/node/node_textpicker_modifier.cpp +++ b/frameworks/core/interfaces/native/node/node_textpicker_modifier.cpp @@ -502,7 +502,7 @@ void SetTextPickerIconRangeStr( { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - TextPickerModelNG::SetTextPickerSingeRange(static_cast(isSingleRange)); + TextPickerModelNG::SetTextPickerSingleRange(frameNode, static_cast(isSingleRange)); std::vector result; for (int i = 0; i < arry->rangeContentArraySize; i++) { NG::RangeContent content; @@ -524,7 +524,7 @@ void SetTextPickerRangeStr( { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - TextPickerModelNG::SetTextPickerSingeRange(static_cast(isSingleRange)); + TextPickerModelNG::SetTextPickerSingleRange(frameNode, static_cast(isSingleRange)); std::vector getRangeVector; StringUtils::StringSplitter(std::string(rangeStr), ';', getRangeVector); if (isSingleRange) { @@ -567,7 +567,7 @@ void SetTextPickerValue(ArkUINodeHandle node, ArkUI_CharPtr valueStr) CHECK_NULL_VOID(frameNode); std::vector getValueVector; StringUtils::StringSplitter(std::string(valueStr), ';', getValueVector); - if (TextPickerModelNG::GetTextPickerSingeRange()) { + if (TextPickerModelNG::GetTextPickerSingleRange(frameNode)) { TextPickerModelNG::SetValue(frameNode, valueStr); } else { TextPickerModelNG::SetValues(frameNode, getValueVector); diff --git a/test/unittest/core/pattern/text_picker/text_picker_model_test_ng.cpp b/test/unittest/core/pattern/text_picker/text_picker_model_test_ng.cpp index b8e7f3a2018fc15ebf65033bcd4cc36d8f562b14..3f34e56667f7210484df8814e805334d52747f76 100644 --- a/test/unittest/core/pattern/text_picker/text_picker_model_test_ng.cpp +++ b/test/unittest/core/pattern/text_picker/text_picker_model_test_ng.cpp @@ -62,29 +62,30 @@ using namespace testing::ext; namespace OHOS::Ace::NG { namespace { - constexpr int32_t ONCHANGE_CALLBACK_INFO = 1; - constexpr int32_t ONSCROLLSTOP_CALLBACK_INFO = 1; - const std::string DEFAULT_CONTENT_VALUE = "hello world"; - const std::vector MENU_OPTIONS = { - { "/data/resource/1.svg", "share" }, - { "/data/resource/2.svg", "translate" } - }; - RefPtr GetTheme(ThemeType type) - { - if (type == IconTheme::TypeId()) { - return AceType::MakeRefPtr(); - } else if (type == DialogTheme::TypeId()) { - return AceType::MakeRefPtr(); - } else if (type == PickerTheme::TypeId()) { - return MockThemeDefault::GetPickerTheme(); - } else if (type == ButtonTheme::TypeId()) { - return AceType::MakeRefPtr(); - } else if (type == TextTheme::TypeId()) { - return AceType::MakeRefPtr(); - } else { - return nullptr; - } +constexpr int32_t ONCHANGE_CALLBACK_INFO = 1; +constexpr int32_t ONSCROLLSTOP_CALLBACK_INFO = 1; +constexpr uint32_t SHOW_COUNT = 7; +const std::string DEFAULT_CONTENT_VALUE = "hello world"; +const std::vector MENU_OPTIONS = { + { "/data/resource/1.svg", "share" }, + { "/data/resource/2.svg", "translate" } +}; +RefPtr GetTheme(ThemeType type) +{ + if (type == IconTheme::TypeId()) { + return AceType::MakeRefPtr(); + } else if (type == DialogTheme::TypeId()) { + return AceType::MakeRefPtr(); + } else if (type == PickerTheme::TypeId()) { + return MockThemeDefault::GetPickerTheme(); + } else if (type == ButtonTheme::TypeId()) { + return AceType::MakeRefPtr(); + } else if (type == TextTheme::TypeId()) { + return AceType::MakeRefPtr(); + } else { + return nullptr; } +} } // namespace class TextPickerModelTestNg : public TestNG { @@ -943,12 +944,12 @@ HWTEST_F(TextPickerModelTestNg, getTextPickerRange001, TestSize.Level1) textPickerModelNG.SetCascadeColumns({}); textPickerModelNG.SetRange({}); - textPickerModelNG.isSingleRange_ = false; + TextPickerModelNG::GetInstance()->SetSingleRange(false); auto result = textPickerModelNG.getTextPickerRange(node); EXPECT_EQ(result.length(), 0); - textPickerModelNG.isSingleRange_ = true; + TextPickerModelNG::GetInstance()->SetSingleRange(true); result = textPickerModelNG.getTextPickerRange(node); EXPECT_EQ(result.length(), 0); @@ -1227,4 +1228,57 @@ HWTEST_F(TextPickerModelTestNg, SelectedBackgroundStyle004, TestSize.Level1) EXPECT_EQ(theme->GetSelectedBackgroundColor(), result1.color); EXPECT_EQ(theme->GetSelectedBorderRadius(), result1.borderRadius); } + +/** + * @tc.name: SetAndGetSingleColumnTest + * @tc.desc: Test TextPicker SetSingleRange GetSingleRange. + * @tc.type: FUNC + */ +HWTEST_F(TextPickerModelTestNg, SetAndGetSingleRangeTest, TestSize.Level1) +{ + auto theme = MockPipelineContext::GetCurrent()->GetTheme(); + ASSERT_NE(theme, nullptr); + TextPickerModelNG::GetInstance()->Create(theme, TEXT); + TextPickerModelNG::GetInstance()->SetSingleRange(false); + + EXPECT_EQ(TextPickerModelNG::GetInstance()->GetSingleRange(), false); + + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + TextPickerModelNG::SetTextPickerSingleRange(frameNode, true); + + EXPECT_EQ(TextPickerModelNG::GetTextPickerSingleRange(frameNode), true); +} + +/** + * @tc.name: GetShowCountTest + * @tc.desc: Test TextPicker GetSingleRange. + * @tc.type: FUNC + */ +HWTEST_F(TextPickerModelTestNg, GetShowCountTest, TestSize.Level1) +{ + auto theme = MockPipelineContext::GetCurrent()->GetTheme(); + ASSERT_NE(theme, nullptr); + TextPickerModelNG::GetInstance()->Create(theme, TEXT); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + EXPECT_EQ(TextPickerModelNG::GetShowCount(frameNode), SHOW_COUNT); +} + +/** + * @tc.name: SetAndGetColumnKind + * @tc.desc: Test TextPicker SetColumnKind GetColumnsKind. + * @tc.type: FUNC + */ +HWTEST_F(TextPickerModelTestNg, SetAndGetColumnKind, TestSize.Level1) +{ + auto theme = MockPipelineContext::GetCurrent()->GetTheme(); + ASSERT_NE(theme, nullptr); + TextPickerModelNG::GetInstance()->Create(theme, ICON); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + TextPickerModelNG::SetColumnKind(frameNode, TEXT); + + EXPECT_EQ(TextPickerModelNG::GetColumnsKind(frameNode), TEXT); +} } // namespace OHOS::Ace::NG diff --git a/test/unittest/core/pattern/text_picker/text_picker_pattern_test_ng.cpp b/test/unittest/core/pattern/text_picker/text_picker_pattern_test_ng.cpp index fad4766f25c612311719df88597f900c655ae38b..06afb4cf07c98b0351935ebd81dee702d0d3aa5d 100644 --- a/test/unittest/core/pattern/text_picker/text_picker_pattern_test_ng.cpp +++ b/test/unittest/core/pattern/text_picker/text_picker_pattern_test_ng.cpp @@ -303,7 +303,7 @@ HWTEST_F(TextPickerPatternTestNg, TextPickerPatternToJsonValue003, TestSize.Leve auto textPickerPattern = frameNode->GetPattern(); /** - * @tc.cases: case. cover cascadeOriginptions_ is not empty + * @tc.cases: case. cover cascadeOriginOptions_ is not empty */ NG::TextCascadePickerOptions option; option.rangeResult = { "rangeResult1", "rangeResult2" }; diff --git a/test/unittest/core/pattern/text_picker/text_picker_test_ng.cpp b/test/unittest/core/pattern/text_picker/text_picker_test_ng.cpp index 6478f22f6e9d47e0738260b6d4c202839583f51e..9ab74428d636c2a01b8e9bdfae48e74de2657a18 100644 --- a/test/unittest/core/pattern/text_picker/text_picker_test_ng.cpp +++ b/test/unittest/core/pattern/text_picker/text_picker_test_ng.cpp @@ -2144,14 +2144,14 @@ HWTEST_F(TextPickerTestNg, TextPickerModelTest006, TestSize.Level0) * @tc.expected: prop is set as expected */ TextPickerModelNG::GetInstance()->SetIsCascade(true); - TextPickerModelNG::isSingleRange_ = !TextPickerModelNG::isSingleRange_; + TextPickerModelNG::GetInstance()->SetSingleRange(false); NG::TextCascadePickerOptions options1; options1.rangeResult = { "11", "12", "13" }; options.emplace_back(options1); TextPickerModelNG::SetColumns(node, options); TextPickerModelNG::getTextPickerRange(node); EXPECT_EQ(TextPickerModelNG::GetInstance()->IsCascade(), true); - EXPECT_EQ(TextPickerModelNG::isSingleRange_, false); + EXPECT_EQ(TextPickerModelNG::GetInstance()->GetSingleRange(), false); }