From e7450e9480e82eb6fcf87352aa0a87b44e11aeaf Mon Sep 17 00:00:00 2001 From: WonBae Kim Date: Wed, 12 Jun 2013 08:59:02 +0900 Subject: [PATCH] CR(tizen_2.2): Apply the feature to show password as plain-text in EditField Change-Id: I600081ea933c0ccd9d7f2d5f7702fea1a34c4319 --- inc/FUiCtrlEditField.h | 28 ++++++++ src/ui/controls/FUiCtrlEditField.cpp | 18 ++++++ src/ui/controls/FUiCtrl_Edit.cpp | 12 ++++ src/ui/controls/FUiCtrl_EditFieldImpl.cpp | 19 ++++++ src/ui/controls/FUiCtrl_EditPresenter.cpp | 103 ++++++++++++++++++++++++++++++ src/ui/controls/FUiCtrl_Keypad.cpp | 8 +++ src/ui/inc/FUiCtrl_Edit.h | 2 + src/ui/inc/FUiCtrl_EditFieldImpl.h | 2 + src/ui/inc/FUiCtrl_EditPresenter.h | 4 ++ 9 files changed, 196 insertions(+) mode change 100644 => 100755 inc/FUiCtrlEditField.h mode change 100644 => 100755 src/ui/controls/FUiCtrlEditField.cpp mode change 100644 => 100755 src/ui/controls/FUiCtrl_Edit.cpp mode change 100644 => 100755 src/ui/controls/FUiCtrl_EditFieldImpl.cpp mode change 100644 => 100755 src/ui/controls/FUiCtrl_Keypad.cpp mode change 100644 => 100755 src/ui/inc/FUiCtrl_Edit.h mode change 100644 => 100755 src/ui/inc/FUiCtrl_EditFieldImpl.h mode change 100644 => 100755 src/ui/inc/FUiCtrl_EditPresenter.h diff --git a/inc/FUiCtrlEditField.h b/inc/FUiCtrlEditField.h old mode 100644 new mode 100755 index d1f5abe..da76b14 --- a/inc/FUiCtrlEditField.h +++ b/inc/FUiCtrlEditField.h @@ -1469,6 +1469,34 @@ public: */ void SendOpaqueCommand (const Tizen::Base::String& command); + /** + * Makes password text visible even when %EditField is in password-related styles + * + * @since 2.2 + * + * @return An error code + * @param[in] visible Set to @c true to show password as plain text, @n else @c false. + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_OPERATION The current state of the instance prohibits the execution of the specified operation. @n + * This operation is supported when the EditFieldStyle is ::EDIT_FIELD_STYLE_PASSWORD, @n ::EDIT_FIELD_STYLE_PASSWORD_SMALL, ::EDIT_FIELD_STYLE_PASSWORD_NUMBER, or ::EDIT_FIELD_STYLE_PASSWORD_NUMBER_SMALL. + */ + result SetPasswordVisible(bool visible); + + /** + * Checks whether the password text is visible when %EditField is in password-related styles + * + * @since 2.2 + * + * @return @c true if the password is visible as plain text, @n + * else @c false + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_OPERATION The current state of the instance prohibits the execution of the specified operation. @n + * This operation is supported when the EditFieldStyle is ::EDIT_FIELD_STYLE_PASSWORD, @n ::EDIT_FIELD_STYLE_PASSWORD_SMALL, ::EDIT_FIELD_STYLE_PASSWORD_NUMBER, or ::EDIT_FIELD_STYLE_PASSWORD_NUMBER_SMALL. + * @remarks The specific error code can be accessed using the GetLastResult() method. + * @see SetPasswordVisible() + */ + bool IsPasswordVisible(void) const; + protected: friend class _EditFieldImpl; diff --git a/src/ui/controls/FUiCtrlEditField.cpp b/src/ui/controls/FUiCtrlEditField.cpp old mode 100644 new mode 100755 index 8c38e1a..4636ede --- a/src/ui/controls/FUiCtrlEditField.cpp +++ b/src/ui/controls/FUiCtrlEditField.cpp @@ -1037,4 +1037,22 @@ EditField::SendOpaqueCommand (const String& command) return; } +result +EditField::SetPasswordVisible(bool visible) +{ + _EditFieldImpl* pEditFieldImpl = _EditFieldImpl::GetInstance(*this); + SysAssertf(pEditFieldImpl != null, "Not yet constructed. Construct() should be called before use."); + + return pEditFieldImpl->SetPasswordVisible(visible); +} + +bool +EditField::IsPasswordVisible(void) const +{ + const _EditFieldImpl* pEditFieldImpl = _EditFieldImpl::GetInstance(*this); + SysAssertf(pEditFieldImpl != null, "Not yet constructed. Construct() should be called before use."); + + return pEditFieldImpl->IsPasswordVisible(); +} + }}} // Tizen::Ui::Controls diff --git a/src/ui/controls/FUiCtrl_Edit.cpp b/src/ui/controls/FUiCtrl_Edit.cpp old mode 100644 new mode 100755 index 81003df..32e9cca --- a/src/ui/controls/FUiCtrl_Edit.cpp +++ b/src/ui/controls/FUiCtrl_Edit.cpp @@ -3339,4 +3339,16 @@ _Edit::GetTextAccessibilityElement(void) const return __pTextAccessibilityElement; } +result +_Edit::SetPasswordVisible(bool visible) +{ + return _pEditPresenter->SetPasswordVisible(visible); +} + +bool +_Edit::IsPasswordVisible(void) const +{ + return _pEditPresenter->IsPasswordVisible(); +} + }}} // Tizen::Ui::Controls diff --git a/src/ui/controls/FUiCtrl_EditFieldImpl.cpp b/src/ui/controls/FUiCtrl_EditFieldImpl.cpp old mode 100644 new mode 100755 index 5edea3b..448464c --- a/src/ui/controls/FUiCtrl_EditFieldImpl.cpp +++ b/src/ui/controls/FUiCtrl_EditFieldImpl.cpp @@ -1497,6 +1497,25 @@ _EditFieldImpl::GetCurrentLanguage(LanguageCode& language) const } result +_EditFieldImpl::SetPasswordVisible(bool visible) +{ + SysTryReturnResult(NID_UI_CTRL, (__pEdit->GetEditStyle() & EDIT_STYLE_PASSWORD), E_INVALID_OPERATION, + "Edit Style is not EDIT_STYLE_PASSWORD.\n"); + + return __pEdit->SetPasswordVisible(visible); +} + +bool +_EditFieldImpl::IsPasswordVisible(void) const +{ + ClearLastResult(); + + SysTryReturn(NID_UI_CTRL, (__pEdit->GetEditStyle() & EDIT_STYLE_PASSWORD), false, E_INVALID_OPERATION, "Edit Style is not EDIT_STYLE_PASSWORD.\n"); + + return __pEdit->IsPasswordVisible(); +} + +result _EditFieldImpl::OnBoundsChanged(const Rectangle& oldRect, const Rectangle& newRect) { return E_SUCCESS; diff --git a/src/ui/controls/FUiCtrl_EditPresenter.cpp b/src/ui/controls/FUiCtrl_EditPresenter.cpp index 29d1894..2527f76 100755 --- a/src/ui/controls/FUiCtrl_EditPresenter.cpp +++ b/src/ui/controls/FUiCtrl_EditPresenter.cpp @@ -233,6 +233,7 @@ _EditPresenter::_EditPresenter(void) , __blockTextColor(Color(0, 0, 0)) , __rowCursorIndex(-1) , __columnCursorIndex(-1) + , __isPasswordVisible(false) { } @@ -8993,6 +8994,11 @@ _EditPresenter::ChangePasswordToEchoCharacter(int cursorPos, int textLength) return E_SYSTEM; } + if (__isPasswordVisible) + { + return r; + } + StartPasswordTimer(); if (IsBlocked() == true) { @@ -9024,6 +9030,11 @@ _EditPresenter::StartPasswordTimer(void) { result r = E_SUCCESS; + if (__isPasswordVisible) + { + return r; + } + if (__pPasswordTimer == null) { __pPasswordTimer = new (std::nothrow) Timer; @@ -9081,6 +9092,11 @@ _EditPresenter::ReplaceTextIntoPasswordHyphenString(void) { result r = E_SUCCESS; + if (__isPasswordVisible) + { + return r; + } + if (__pEdit->GetEditStyle() & EDIT_STYLE_PASSWORD) { if (GetTextLength() > 0) @@ -9098,6 +9114,11 @@ _EditPresenter::ChangePasswordToEchoCharacter(wchar_t* dspStrBuffer, wchar_t ech { result r = E_SUCCESS; + if (__isPasswordVisible) + { + return r; + } + int bufferLength = GetTextLength(); for (int i = 0; i < bufferLength && i < EDIT_PASSWORD_BUFFER_MAX - 1; i++) @@ -9111,6 +9132,38 @@ _EditPresenter::ChangePasswordToEchoCharacter(wchar_t* dspStrBuffer, wchar_t ech } result +_EditPresenter::ChangePasswordToPlainText(void) +{ + result r = E_SUCCESS; + + if (__isPasswordVisible == false) + { + return r; + } + + if (__pEdit->GetEditStyle() & EDIT_STYLE_PASSWORD) + { + int textLength = GetTextLength(); + if ((textLength > 0) && (textLength <= __limitLength)) + { + wchar_t* tempString = const_cast(__pTextString->GetPointer()); + for (int i = 0; i < textLength; i++) + { + __pTextBuffer[i] = tempString[i]; + } + __pTextBuffer[textLength] = 0; + __pTextObject->RemoveAll(); + TextSimple* pSimpleText = new (std::nothrow)TextSimple(__pTextBuffer, textLength,TEXT_ELEMENT_SOURCE_TYPE_EXTERNAL, __pFont); + __pTextObject->AppendElement(*pSimpleText); + __pTextObject->Compose(); + __isCursorChanged = true; + } + } + + return r; +} + +result _EditPresenter::SetAutoResizingEnabled(bool enable) { return __pEditModel->SetAutoResizingEnabled(enable); @@ -10909,4 +10962,54 @@ _EditPresenter::UpdateKeypadCommandString(void) } } +result +_EditPresenter::SetPasswordVisible(bool visible) +{ + result r = E_SUCCESS; + + SysTryReturnResult(NID_UI_CTRL, (__pEdit->GetEditStyle() & EDIT_STYLE_PASSWORD), E_INVALID_OPERATION, + "Edit Style is not EDIT_STYLE_PASSWORD.\n") + + + if (__isPasswordVisible == visible) + { + return r; + } + + __isPasswordVisible = visible; + + if (GetTextLength()== 0) + { + return r; + } + + InitializeCopyPasteManager(); + + if (__isInputConnectionBound && __isTextComposing) + { + __pInputConnection->FinishTextComposition(); + __isTextComposing = false; + __composingTextLength = 0; + } + + if (__isPasswordVisible) + { + StopPasswordTimer(); + ChangePasswordToPlainText(); + } + else + { + ReplaceTextIntoPasswordHyphenString(); + __pTextObject->NotifyTextChanged(__pTextBuffer, 0, __pTextString->GetLength(), 0); + } + + return r; +} + +bool +_EditPresenter::IsPasswordVisible(void) const +{ + return __isPasswordVisible; +} + }}} // Tizen::Ui::Controls diff --git a/src/ui/controls/FUiCtrl_Keypad.cpp b/src/ui/controls/FUiCtrl_Keypad.cpp old mode 100644 new mode 100755 index 44329de..a45c285 --- a/src/ui/controls/FUiCtrl_Keypad.cpp +++ b/src/ui/controls/FUiCtrl_Keypad.cpp @@ -209,6 +209,14 @@ _Keypad::Initialize(int editStyle, _KeypadStyleInfo keypadStyleInfo, int limitLe pAccessibilityContainer->AddChildContainer(*pAccessibilityEdit); } } + + if (__pCallerEdit) + { + if (editStyle & EDIT_STYLE_PASSWORD) + { + __pChildEdit->SetPasswordVisible(__pCallerEdit->IsPasswordVisible()); + } + } } SetClipChildrenEnabled(false); diff --git a/src/ui/inc/FUiCtrl_Edit.h b/src/ui/inc/FUiCtrl_Edit.h old mode 100644 new mode 100755 index 7fcfca6..929cb7b --- a/src/ui/inc/FUiCtrl_Edit.h +++ b/src/ui/inc/FUiCtrl_Edit.h @@ -330,6 +330,7 @@ public: result SetVerticalMargin(float margin, EditTextVerticalMargin marginType = EDIT_TEXT_VERTICAL_MARGIN); void SetEditStyle(unsigned long style); void SetBorderRoundStyleEnabled(bool enable); + result SetPasswordVisible(bool visible); unsigned long GetAutoLinkMask(void) const; Tizen::Graphics::Bitmap* GetBackgroundBitmap(EditStatus status) const; @@ -425,6 +426,7 @@ public: bool IsClipboardExist(void) const; bool CheckKeypadExist(_ControlOrientation orientation); bool IsDestroyed(void) const; + bool IsPasswordVisible(void) const; virtual void SetAutoShrinkModeEnabled(bool enable); virtual bool IsAutoShrinkModeEnabled(void) const; diff --git a/src/ui/inc/FUiCtrl_EditFieldImpl.h b/src/ui/inc/FUiCtrl_EditFieldImpl.h old mode 100644 new mode 100755 index 7587436..5b669d1 --- a/src/ui/inc/FUiCtrl_EditFieldImpl.h +++ b/src/ui/inc/FUiCtrl_EditFieldImpl.h @@ -117,6 +117,7 @@ public: result SetTitleTextColor(EditStatus status, const Tizen::Graphics::Color& color); result SetViewModeEnabled(bool enable); result SetTextPredictionEnabled(bool enable); + result SetPasswordVisible(bool visible); unsigned long GetAutoLinkMask(void) const; void GetBlockRange(int& start, int& end) const; @@ -163,6 +164,7 @@ public: bool IsOverlayCommandButtonVisible(void) const; bool IsViewModeEnabled(void) const; bool IsTextPredictionEnabled(void) const; + bool IsPasswordVisible(void) const; result Paste(void); result ReleaseBlock(void); diff --git a/src/ui/inc/FUiCtrl_EditPresenter.h b/src/ui/inc/FUiCtrl_EditPresenter.h old mode 100644 new mode 100755 index d8363f0..95d7332 --- a/src/ui/inc/FUiCtrl_EditPresenter.h +++ b/src/ui/inc/FUiCtrl_EditPresenter.h @@ -333,6 +333,8 @@ public: result CalculateCursorBounds(const Tizen::Graphics::FloatRectangle& textBounds, Tizen::Graphics::FloatRectangle& cursorBounds, int rowIndex, int columnIndex); virtual void ResetTextBounds(void){} void UpdateKeypadCommandString(void); + result SetPasswordVisible(bool visible); + bool IsPasswordVisible(void) const; protected: void StopTitleSlidingTimer(void); @@ -412,6 +414,7 @@ private: result ChangePasswordToEchoCharacter(wchar_t* dspStrBuffer, wchar_t echoChar); // todo : move to PastePasswordEchoCharacter result ReplaceTextIntoPasswordHyphenString(void); + result ChangePasswordToPlainText(void); // todo : delete, do not use result SetFocused(void); void ScrollText(float distance); @@ -577,6 +580,7 @@ private: Tizen::Graphics::Color __blockTextColor; int __rowCursorIndex; int __columnCursorIndex; + bool __isPasswordVisible; }; // _EditPresenter }}} // Tizen::Ui::Controls -- 2.7.4