diff --git a/CHANGELOG b/CHANGELOG index 2aaa3aaec..4a1f7019d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,7 +3,7 @@ KeePassDX(3.4.0) * Dynamically save password generator configuration #618 #696 * Add advanced password filters #1052 #448 * Add editable chars fields #539 - * Add color for special password chars #454 + * Better visualization of passwords #454 #1270 * Passphrase implementation #218 * Fix small bugs #1282 diff --git a/app/src/main/java/com/kunzisoft/keepass/adapters/NodesAdapter.kt b/app/src/main/java/com/kunzisoft/keepass/adapters/NodesAdapter.kt index c5fe46ada..352e2eedc 100644 --- a/app/src/main/java/com/kunzisoft/keepass/adapters/NodesAdapter.kt +++ b/app/src/main/java/com/kunzisoft/keepass/adapters/NodesAdapter.kt @@ -516,7 +516,7 @@ class NodesAdapter (private val context: Context, null -> {} } holder?.otpToken?.apply { - text = otpElement?.token + text = otpElement?.tokenString setTextSize(mTextSizeUnit, mOtpTokenTextDefaultDimension, mPrefSizeMultiplier) } holder?.otpContainer?.setOnClickListener { diff --git a/app/src/main/java/com/kunzisoft/keepass/otp/OtpElement.kt b/app/src/main/java/com/kunzisoft/keepass/otp/OtpElement.kt index eef173567..e98740fd6 100644 --- a/app/src/main/java/com/kunzisoft/keepass/otp/OtpElement.kt +++ b/app/src/main/java/com/kunzisoft/keepass/otp/OtpElement.kt @@ -178,6 +178,14 @@ data class OtpElement(var otpModel: OtpModel = OtpModel()) { } } + /** + * Token with space each 3 digits + */ + val tokenString: String + get() { + return token.replace("...".toRegex(), "$0 ") + } + val secondsRemaining: Int get() = otpModel.period - (System.currentTimeMillis() / 1000 % otpModel.period).toInt() diff --git a/app/src/main/java/com/kunzisoft/keepass/view/TemplateView.kt b/app/src/main/java/com/kunzisoft/keepass/view/TemplateView.kt index 5ecc8d480..2c7b4e968 100644 --- a/app/src/main/java/com/kunzisoft/keepass/view/TemplateView.kt +++ b/app/src/main/java/com/kunzisoft/keepass/view/TemplateView.kt @@ -165,7 +165,7 @@ class TemplateView @JvmOverloads constructor(context: Context, setCopyButtonState(TextFieldView.ButtonState.GONE) } else { label = otpElement.type.name - value = otpElement.token + value = otpElement.tokenString setCopyButtonState(TextFieldView.ButtonState.ACTIVATE) setCopyButtonClickListener { _, _ -> mOnCopyActionClickListener?.invoke(Field( @@ -175,7 +175,7 @@ class TemplateView @JvmOverloads constructor(context: Context, mLastOtpTokenView = this mOtpRunnable = Runnable { if (otpElement.shouldRefreshToken()) { - value = otpElement.token + value = otpElement.tokenString } if (mLastOtpTokenView == null) { mOnOtpElementUpdated?.invoke(null) diff --git a/app/src/main/res/layout/item_list_nodes_entry.xml b/app/src/main/res/layout/item_list_nodes_entry.xml index f2b70454b..7bfa59ca6 100644 --- a/app/src/main/res/layout/item_list_nodes_entry.xml +++ b/app/src/main/res/layout/item_list_nodes_entry.xml @@ -144,7 +144,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - tools:text="5136" /> + tools:text="513 651" />