From: Seoyeon Kim Date: Mon, 22 Nov 2021 05:17:43 +0000 (+0000) Subject: Merge "[AT-SPI] Support for hidden text added" into devel/master X-Git-Tag: dali_2.1.0~9 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=79c48ed0f1dc5f7fbcc0f8ea5c5e1b1fd297b42d;hp=3ce558ca09f928cb18cacfa80f52eb0c591181b9 Merge "[AT-SPI] Support for hidden text added" into devel/master --- diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Text.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Text.cpp index 6b77f00..eea6fa6 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Text.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Text.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include @@ -221,6 +222,20 @@ int utcDaliAccessibilityTextFieldGetText(void) DALI_TEST_EQUALS( x->GetText( 0, 0 ), "", TEST_LOCATION ); field.SetProperty( Toolkit::TextField::Property::TEXT, "exemplary_text" ); DALI_TEST_EQUALS( x->GetText( 0, 9 ), "exemplary", TEST_LOCATION ); + + Dali::Property::Map hiddenInputSettings; + hiddenInputSettings[ Toolkit::HiddenInput::Property::MODE ] = Toolkit::HiddenInput::Mode::HIDE_ALL; + + field.SetProperty( Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS, hiddenInputSettings ); + + DALI_TEST_EQUALS( x->GetName(), "", TEST_LOCATION ); + DALI_TEST_EQUALS( x->GetText( 0, 9 ), "*********", TEST_LOCATION ); + + hiddenInputSettings[ Toolkit::HiddenInput::Property::SUBSTITUTE_CHARACTER ] = 0x23; + field.SetProperty( Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS, hiddenInputSettings ); + + DALI_TEST_EQUALS( x->GetName(), "", TEST_LOCATION ); + DALI_TEST_EQUALS( x->GetText( 0, 9 ), "#########", TEST_LOCATION ); } END_TEST; @@ -294,6 +309,16 @@ int utcDaliAccessibilityTextFieldGetTextAtOffset(void) DALI_TEST_EQUALS( range.content, " test sentence", TEST_LOCATION ); DALI_TEST_EQUALS( range.startOffset, 25, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 39, TEST_LOCATION ); + + Dali::Property::Map hiddenInputSettings; + hiddenInputSettings[ Toolkit::HiddenInput::Property::MODE ] = Toolkit::HiddenInput::Mode::HIDE_ALL; + hiddenInputSettings[ Toolkit::HiddenInput::Property::SUBSTITUTE_CHARACTER ] = 0x23; + field.SetProperty( Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS, hiddenInputSettings ); + range = x->GetTextAtOffset( 8, Dali::Accessibility::TextBoundary::LINE ); + DALI_TEST_EQUALS( range.content, "", TEST_LOCATION ); + DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION ); + DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION ); + } END_TEST; @@ -321,6 +346,15 @@ int utcDaliAccessibilityTextFieldGetSetRangeOfSelection(void) DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION ); DALI_TEST_EQUALS( range.content, "plary", TEST_LOCATION ); + + Dali::Property::Map hiddenInputSettings; + hiddenInputSettings[ Toolkit::HiddenInput::Property::MODE ] = Toolkit::HiddenInput::Mode::HIDE_ALL; + field.SetProperty( Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS, hiddenInputSettings ); + + range = x->GetRangeOfSelection( 0 ); + DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION ); + DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION ); + DALI_TEST_EQUALS( range.content, "*****", TEST_LOCATION ); } END_TEST; diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index fe01e46..b48faa0 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -201,6 +201,28 @@ Toolkit::TextField::InputStyle::Mask ConvertInputStyle(Text::InputStyle::Mask in return fieldInputStyleMask; } +bool IsHiddenInput(Toolkit::TextField textField) +{ + Property::Map hiddenInputSettings = textField.GetProperty(Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS); + auto mode = hiddenInputSettings.Find(Toolkit::HiddenInput::Property::MODE); + if (mode && (mode->Get() != Toolkit::HiddenInput::Mode::HIDE_NONE)) + { + return true; + } + return false; +} + +char GetSubstituteCharacter(Toolkit::TextField textField) +{ + Property::Map hiddenInputSettings = textField.GetProperty(Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS); + auto substChar = hiddenInputSettings.Find(Toolkit::HiddenInput::Property::SUBSTITUTE_CHARACTER); + if (substChar) + { + return static_cast(substChar->Get()); + } + return STAR; +} + } // namespace Toolkit::TextField TextField::New() @@ -1101,6 +1123,11 @@ TextField::~TextField() std::string TextField::AccessibleImpl::GetName() { auto self = Toolkit::TextField::DownCast(Self()); + if (IsHiddenInput(self)) + { + return {}; + } + return self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); } @@ -1118,7 +1145,10 @@ std::string TextField::AccessibleImpl::GetText(size_t startOffset, size_t endOff { return {}; } - + if(IsHiddenInput(self)) + { + return std::string(endOffset - startOffset, GetSubstituteCharacter(self)); + } return text.substr(startOffset, endOffset - startOffset); } @@ -1156,11 +1186,18 @@ Dali::Accessibility::Range TextField::AccessibleImpl::GetTextAtOffset( size_t offset, Dali::Accessibility::TextBoundary boundary) { auto self = Toolkit::TextField::DownCast(Self()); + auto range = Dali::Accessibility::Range{}; + + if(IsHiddenInput(self)) + { + // Returning empty object, as there is no possibility to parse the textfield + // when its content is hidden. + return range; + } + auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); auto textSize = text.size(); - auto range = Dali::Accessibility::Range{}; - switch(boundary) { case Dali::Accessibility::TextBoundary::CHARACTER: @@ -1252,13 +1289,21 @@ Dali::Accessibility::Range TextField::AccessibleImpl::GetRangeOfSelection(size_t return {}; } - auto self = Toolkit::TextField::DownCast(Self()); - auto controller = Dali::Toolkit::GetImpl(self).GetTextController(); - std::string value{}; - controller->RetrieveSelection(value); + auto self = Toolkit::TextField::DownCast(Self()); + auto controller = Dali::Toolkit::GetImpl(self).GetTextController(); auto indices = controller->GetSelectionIndexes(); - return {static_cast(indices.first), static_cast(indices.second), value}; + auto startOffset = static_cast(indices.first); + auto endOffset = static_cast(indices.second); + + if (IsHiddenInput(self)) + { + return {startOffset, endOffset, std::string(endOffset - startOffset, GetSubstituteCharacter(self))}; + } + + std::string value{}; + controller->RetrieveSelection(value); + return {startOffset, endOffset, value}; } bool TextField::AccessibleImpl::RemoveSelection(size_t selectionIndex) diff --git a/dali-toolkit/internal/controls/text-controls/text-field-property-handler.cpp b/dali-toolkit/internal/controls/text-controls/text-field-property-handler.cpp index 04a5082..db08d3ae 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-property-handler.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-property-handler.cpp @@ -507,6 +507,15 @@ void TextField::PropertyHandler::SetProperty(Toolkit::TextField textField, Prope if(map) { impl.mController->SetHiddenInputOption(*map); + auto mode = map->Find(Toolkit::HiddenInput::Property::MODE); + if(mode && (mode->Get() != Toolkit::HiddenInput::Mode::HIDE_NONE)) + { + textField.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Accessibility::Role::PASSWORD_TEXT); + } + else + { + textField.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Accessibility::Role::ENTRY); + } } break; } diff --git a/dali-toolkit/internal/text/hidden-text.cpp b/dali-toolkit/internal/text/hidden-text.cpp index 1adbe83..ab2aba5 100644 --- a/dali-toolkit/internal/text/hidden-text.cpp +++ b/dali-toolkit/internal/text/hidden-text.cpp @@ -23,7 +23,6 @@ using namespace Dali::Toolkit; -const uint32_t STAR = 0x2A; // Set default substitute character as '*' const int DEFAULT_SHOW_DURATION = 1000; namespace Dali diff --git a/dali-toolkit/internal/text/hidden-text.h b/dali-toolkit/internal/text/hidden-text.h index 70d4a82..b13c263 100644 --- a/dali-toolkit/internal/text/hidden-text.h +++ b/dali-toolkit/internal/text/hidden-text.h @@ -32,6 +32,9 @@ namespace Toolkit { namespace Text { + +static constexpr const uint32_t STAR = 0x2A; // Set default substitute character as '*' + /** * Class to handle the hidden text */