CR(tizen_2.2): Apply the feature to show password as plain-text in EditField
authorWonBae Kim <wb.kim@samsung.com>
Tue, 11 Jun 2013 23:59:02 +0000 (08:59 +0900)
committerWonBae Kim <wb.kim@samsung.com>
Tue, 11 Jun 2013 23:59:02 +0000 (08:59 +0900)
Change-Id: I600081ea933c0ccd9d7f2d5f7702fea1a34c4319

inc/FUiCtrlEditField.h [changed mode: 0644->0755]
src/ui/controls/FUiCtrlEditField.cpp [changed mode: 0644->0755]
src/ui/controls/FUiCtrl_Edit.cpp [changed mode: 0644->0755]
src/ui/controls/FUiCtrl_EditFieldImpl.cpp [changed mode: 0644->0755]
src/ui/controls/FUiCtrl_EditPresenter.cpp
src/ui/controls/FUiCtrl_Keypad.cpp [changed mode: 0644->0755]
src/ui/inc/FUiCtrl_Edit.h [changed mode: 0644->0755]
src/ui/inc/FUiCtrl_EditFieldImpl.h [changed mode: 0644->0755]
src/ui/inc/FUiCtrl_EditPresenter.h [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index d1f5abe..da76b14
@@ -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;
 
old mode 100644 (file)
new mode 100755 (executable)
index 8c38e1a..4636ede
@@ -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
old mode 100644 (file)
new mode 100755 (executable)
index 81003df..32e9cca
@@ -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
old mode 100644 (file)
new mode 100755 (executable)
index 5edea3b..448464c
@@ -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;
index 29d1894..2527f76 100755 (executable)
@@ -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<wchar_t*>(__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
old mode 100644 (file)
new mode 100755 (executable)
index 44329de..a45c285
@@ -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);
old mode 100644 (file)
new mode 100755 (executable)
index 7fcfca6..929cb7b
@@ -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;
 
old mode 100644 (file)
new mode 100755 (executable)
index 7587436..5b669d1
@@ -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);
old mode 100644 (file)
new mode 100755 (executable)
index d8363f0..95d7332
@@ -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