From ca4f4bd1519accf3f70938849b990dbf84c1e507 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Tue, 12 Jan 2021 15:08:59 +0100 Subject: [PATCH] Add priority to OTP button in notification #845 --- .../com/kunzisoft/keepass/model/EntryInfo.kt | 4 ---- .../ClipboardEntryNotificationField.kt | 4 +++- .../ClipboardEntryNotificationService.kt | 19 ++++++++++++++++--- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/model/EntryInfo.kt b/app/src/main/java/com/kunzisoft/keepass/model/EntryInfo.kt index 67d8e410f..4d945e873 100644 --- a/app/src/main/java/com/kunzisoft/keepass/model/EntryInfo.kt +++ b/app/src/main/java/com/kunzisoft/keepass/model/EntryInfo.kt @@ -95,10 +95,6 @@ class EntryInfo : Parcelable { return customFields.lastOrNull { it.name == label } != null } - fun isAutoGeneratedField(field: Field): Boolean { - return field.name == OTP_TOKEN_FIELD - } - fun getGeneratedFieldValue(label: String): String { if (label == OTP_TOKEN_FIELD) { otpModel?.let { diff --git a/app/src/main/java/com/kunzisoft/keepass/notifications/ClipboardEntryNotificationField.kt b/app/src/main/java/com/kunzisoft/keepass/notifications/ClipboardEntryNotificationField.kt index 2f4b6e2db..61dfbcfd3 100644 --- a/app/src/main/java/com/kunzisoft/keepass/notifications/ClipboardEntryNotificationField.kt +++ b/app/src/main/java/com/kunzisoft/keepass/notifications/ClipboardEntryNotificationField.kt @@ -23,6 +23,7 @@ import android.os.Parcel import android.os.Parcelable import android.util.Log import com.kunzisoft.keepass.model.EntryInfo +import com.kunzisoft.keepass.otp.OtpEntryFields.OTP_TOKEN_FIELD import java.util.* /** @@ -54,6 +55,7 @@ class ClipboardEntryNotificationField : Parcelable { NotificationFieldId.UNKNOWN -> "" NotificationFieldId.USERNAME -> entryInfo?.username ?: "" NotificationFieldId.PASSWORD -> entryInfo?.password ?: "" + NotificationFieldId.OTP -> entryInfo?.getGeneratedFieldValue(OTP_TOKEN_FIELD) ?: "" NotificationFieldId.FIELD_A, NotificationFieldId.FIELD_B, NotificationFieldId.FIELD_C -> entryInfo?.getGeneratedFieldValue(label) ?: "" @@ -81,7 +83,7 @@ class ClipboardEntryNotificationField : Parcelable { } enum class NotificationFieldId { - UNKNOWN, USERNAME, PASSWORD, FIELD_A, FIELD_B, FIELD_C; + UNKNOWN, USERNAME, PASSWORD, OTP, FIELD_A, FIELD_B, FIELD_C; companion object { val anonymousFieldId: Array diff --git a/app/src/main/java/com/kunzisoft/keepass/notifications/ClipboardEntryNotificationService.kt b/app/src/main/java/com/kunzisoft/keepass/notifications/ClipboardEntryNotificationService.kt index 9ffd23992..d0678e7d8 100644 --- a/app/src/main/java/com/kunzisoft/keepass/notifications/ClipboardEntryNotificationService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/notifications/ClipboardEntryNotificationService.kt @@ -25,6 +25,7 @@ import android.content.Intent import android.util.Log import com.kunzisoft.keepass.R import com.kunzisoft.keepass.model.EntryInfo +import com.kunzisoft.keepass.otp.OtpEntryFields.OTP_TOKEN_FIELD import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.timeout.ClipboardHelper import com.kunzisoft.keepass.timeout.TimeoutHelper.NEVER @@ -250,6 +251,7 @@ class ClipboardEntryNotificationService : LockNotificationService() { val containsUsernameToCopy = entry.username.isNotEmpty() val containsPasswordToCopy = entry.password.isNotEmpty() && PreferencesUtil.allowCopyPasswordAndProtectedFields(context) + val containsOTPToCopy = entry.containsCustomField(OTP_TOKEN_FIELD) val containsExtraFieldToCopy = entry.customFields.isNotEmpty() && (entry.containsCustomFieldsNotProtected() || @@ -262,7 +264,10 @@ class ClipboardEntryNotificationService : LockNotificationService() { // If notifications enabled in settings // Don't if application timeout if (PreferencesUtil.isClipboardNotificationsEnable(context)) { - if (containsUsernameToCopy || containsPasswordToCopy || containsExtraFieldToCopy) { + if (containsUsernameToCopy + || containsPasswordToCopy + || containsOTPToCopy + || containsExtraFieldToCopy) { // username already copied, waiting for user's action before copy password. intent.action = ACTION_NEW_NOTIFICATION @@ -282,14 +287,22 @@ class ClipboardEntryNotificationService : LockNotificationService() { ClipboardEntryNotificationField.NotificationFieldId.PASSWORD, context.getString(R.string.entry_password))) } + // Add OTP + if (containsOTPToCopy) { + notificationFields.add( + ClipboardEntryNotificationField( + ClipboardEntryNotificationField.NotificationFieldId.OTP, + OTP_TOKEN_FIELD)) + } // Add extra fields if (containsExtraFieldToCopy) { try { var anonymousFieldNumber = 0 entry.customFields.forEach { field -> //If value is not protected or allowed - if (!field.protectedValue.isProtected - || PreferencesUtil.allowCopyPasswordAndProtectedFields(context)) { + if ((!field.protectedValue.isProtected + || PreferencesUtil.allowCopyPasswordAndProtectedFields(context)) + && field.name != OTP_TOKEN_FIELD) { notificationFields.add( ClipboardEntryNotificationField( ClipboardEntryNotificationField.NotificationFieldId.anonymousFieldId[anonymousFieldNumber],