Merge branch 'develop' into feature/Database_4.1

This commit is contained in:
J-Jamet
2021-04-30 11:41:38 +02:00
12 changed files with 43 additions and 44 deletions

View File

@@ -1,6 +1,11 @@
KeePassDX(3.0.0)
*
KeePassDX(2.9.20)
* Fix search with non-latin chars #971
* Fix action mode with search #972 (rollback ignore accents #945)
* Fix timeout with 0s #974
KeePassDX(2.9.19)
* Fix search slowdown #964
* Fix closing notification after lock request #965

View File

@@ -11,7 +11,7 @@ android {
applicationId "com.kunzisoft.keepass"
minSdkVersion 15
targetSdkVersion 30
versionCode = 74
versionCode = 76
versionName = "3.0.0"
multiDexEnabled true

View File

@@ -382,6 +382,7 @@ class GroupActivity : LockingActivity(),
Log.d(TAG, "setNewIntent: $intentNotNull")
setIntent(intentNotNull)
if (Intent.ACTION_SEARCH == intentNotNull.action) {
finishNodeAction()
// only one instance of search in backstack
deletePreviousSearchGroup()
openGroup(retrieveCurrentGroup(intentNotNull, null), true)

View File

@@ -29,7 +29,6 @@ import com.kunzisoft.keepass.model.SearchInfo
import com.kunzisoft.keepass.otp.OtpEntryFields.OTP_FIELD
import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.timeout.TimeoutHelper
import com.kunzisoft.keepass.utils.StringUtil.flattenToAscii
import com.kunzisoft.keepass.utils.UuidUtil
class SearchHelper {
@@ -177,13 +176,13 @@ class SearchHelper {
// TODO Search settings
var regularExpression = false
var ignoreCase = true
var flattenToASCII = true
var removeAccents = true <- Too much time, to study
var excludeExpired = false
var searchOnlyInCurrentGroup = false
*/
return stringToCheck.isNotEmpty()
&& stringToCheck.flattenToAscii().contains(
searchParameters.searchQuery.flattenToAscii(), true)
&& stringToCheck.contains(
searchParameters.searchQuery, true)
}
}
}

View File

@@ -37,7 +37,6 @@ class ClipboardEntryNotificationService : LockNotificationService() {
override val notificationId = 485
private var mEntryInfo: EntryInfo? = null
private var clipboardHelper: ClipboardHelper? = null
private var mNotificationTimeoutMilliSecs: Long = 0
override fun retrieveChannelId(): String {
return CHANNEL_CLIPBOARD_ID
@@ -68,9 +67,6 @@ class ClipboardEntryNotificationService : LockNotificationService() {
// Get entry info from intent
mEntryInfo = intent?.getParcelableExtra(EXTRA_ENTRY_INFO)
//Get settings
mNotificationTimeoutMilliSecs = PreferencesUtil.getClipboardTimeout(this)
when {
intent == null -> Log.w(TAG, "null intent")
ACTION_NEW_NOTIFICATION == intent.action -> {
@@ -169,8 +165,10 @@ class ClipboardEntryNotificationService : LockNotificationService() {
this, 0, cleanIntent, PendingIntent.FLAG_UPDATE_CURRENT)
builder.setDeleteIntent(cleanPendingIntent)
if (mNotificationTimeoutMilliSecs != NEVER) {
defineTimerJob(builder, mNotificationTimeoutMilliSecs, {
//Get settings
val notificationTimeoutMilliSecs = PreferencesUtil.getClipboardTimeout(this)
if (notificationTimeoutMilliSecs != NEVER) {
defineTimerJob(builder, notificationTimeoutMilliSecs, {
val newGeneratedValue = fieldToCopy.getGeneratedValue(mEntryInfo)
// New auto generated value
if (generatedValue != newGeneratedValue) {

View File

@@ -80,17 +80,22 @@ abstract class NotificationService : Service() {
actionEnd: () -> Unit) {
mTimerJob?.cancel()
mTimerJob = CoroutineScope(Dispatchers.Main).launch {
val timeoutInSeconds = timeoutMilliseconds / 1000L
for (currentTime in timeoutInSeconds downTo 0) {
actionAfterASecond?.invoke()
builder.setProgress(100,
(currentTime * 100 / timeoutInSeconds).toInt(),
false)
startForeground(notificationId, builder.build())
delay(1000)
if (currentTime <= 0) {
actionEnd()
if (timeoutMilliseconds > 0) {
val timeoutInSeconds = timeoutMilliseconds / 1000L
for (currentTime in timeoutInSeconds downTo 0) {
actionAfterASecond?.invoke()
builder.setProgress(100,
(currentTime * 100 / timeoutInSeconds).toInt(),
false)
startForeground(notificationId, builder.build())
delay(1000)
if (currentTime <= 0) {
actionEnd()
}
}
} else {
// If timeout is 0, run action once
actionEnd()
}
notificationManager?.cancel(notificationId)
mTimerJob = null

View File

@@ -12,20 +12,5 @@ object StringUtil {
return this.replace("[\\r|\\n|\\t|\\s|\\u00A0]+".toRegex(), "")
}
fun String.flattenToAscii(): String {
var string = this
val out = CharArray(string.length)
string = Normalizer.normalize(string, Normalizer.Form.NFD)
var j = 0
var i = 0
val n = string.length
while (i < n) {
val c = string[i]
if (c <= '\u007F') out[j++] = c
++i
}
return String(out)
}
fun ByteArray.toHexString() = joinToString("") { "%02X".format(it) }
}

View File

@@ -49,9 +49,9 @@ platform :android do
lane :deploy_beta_free do
upload_to_play_store(
track: "beta",
skip_upload_metadata: "false",
skip_upload_images: "false",
skip_upload_screenshots: "false",
skip_upload_metadata: "true",
skip_upload_images: "true",
skip_upload_screenshots: "true",
apk: "./app/build/outputs/apk/free/release/app-free-release.apk",
validate_only: "false",
)
@@ -62,9 +62,9 @@ platform :android do
sh("cp", "-a", "./pro/.", "./")
upload_to_play_store(
track: "beta",
skip_upload_metadata: "false",
skip_upload_images: "false",
skip_upload_screenshots: "false",
skip_upload_metadata: "true",
skip_upload_images: "true",
skip_upload_screenshots: "true",
apk: "./app/build/outputs/apk/pro/release/app-pro-release.apk",
validate_only: "false",
)

View File

@@ -1 +1,3 @@
*
* Fix search with non-latin chars #971
* Fix action mode with search #972 (rollback ignore accents #945)
* Fix timeout with 0s #974

View File

@@ -0,0 +1 @@
*

View File

@@ -1 +1,3 @@
*
* Correction de la recherche avec des caractères non latin #971
* Correction du mode action avec la recherche #972 (retour arrière des accents ignorés #945)
* Correction de l'expiration de temps à 0s #974

View File

@@ -0,0 +1 @@
*