From 7da58627253818d6c81173d88ab811d499df13e1 Mon Sep 17 00:00:00 2001 From: "forkline-dev[bot]" Date: Tue, 27 Oct 2026 22:49:28 +0000 Subject: [PATCH 1/2] release: 1.27.0 --- CHANGELOG.md | 5 ++++- app/version.properties | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ef79abdb..f41b00311 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file ## [Unreleased] +## [1.27.0] - 2026-10-27 + ### Added - Setting to enable Autofill directly from the app settings @@ -983,7 +985,8 @@ All notable changes to this project will be documented in this file - Fix elements overlapping. -[unreleased]: https://github.com/pando85/Android-Password-Store/compare/v1.26.0...HEAD +[unreleased]: https://github.com/pando85/Android-Password-Store/compare/v1.27.0...HEAD +[1.27.0]: https://github.com/pando85/Android-Password-Store/compare/v1.26.0...v1.27.0 [1.26.0]: https://github.com/pando85/Android-Password-Store/compare/v1.25.2...v1.26.0 [1.25.2]: https://github.com/pando85/Android-Password-Store/compare/v1.25.1...v1.25.2 [1.25.1]: https://github.com/pando85/Android-Password-Store/compare/v1.25.0...v1.25.1 diff --git a/app/version.properties b/app/version.properties index 21f2bc4d1..d86c1c84f 100644 --- a/app/version.properties +++ b/app/version.properties @@ -1,5 +1,5 @@ # # This file was automatically generated by 'versioning-plugin'. DO NOT EDIT MANUALLY. # -versioning-plugin.versionCode=12600 -versioning-plugin.versionName=1.26.0 +versioning-plugin.versionCode=12700 +versioning-plugin.versionName=1.27.0 From e74bcceb633b7f7b8c60155c86536c471e74e1f4 Mon Sep 17 00:00:00 2001 From: "forkline-dev[bot]" Date: Tue, 27 Oct 2026 22:59:53 +0000 Subject: [PATCH 2/2] fix: address maintainability issues in v1.27.0 release - Fix DirectoryStructure.getIdentifierFor() for DirectoryBased mode: was returning full path instead of just the directory name, affecting sort ordering in the password list - Fix renameFilesInDirectoryTree() using String.replace() which corrupts filenames containing the extension string multiple times; use removeSuffix() instead - Fix import progress dialog showing export message string (copy-paste bug) - Add explicit parentheses to validateInput() condition in PasswordCreationActivity for clarity - Simplify redundant ?.let { it } ?: "" in AutofillViewUtils - Remove unused PORT_REGEX constant from GitServerConfigActivity --- .../app/passwordstore/ui/crypto/PasswordCreationActivity.kt | 4 ++-- .../passwordstore/ui/git/config/GitServerConfigActivity.kt | 2 -- .../java/app/passwordstore/ui/settings/RepositorySettings.kt | 4 ++-- .../java/app/passwordstore/util/autofill/AutofillViewUtils.kt | 4 ++-- .../app/passwordstore/util/settings/DirectoryStructure.kt | 2 +- app/src/main/res/values/strings.xml | 1 + 6 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/app/passwordstore/ui/crypto/PasswordCreationActivity.kt b/app/src/main/java/app/passwordstore/ui/crypto/PasswordCreationActivity.kt index 80fde7a14..211e5dfa7 100644 --- a/app/src/main/java/app/passwordstore/ui/crypto/PasswordCreationActivity.kt +++ b/app/src/main/java/app/passwordstore/ui/crypto/PasswordCreationActivity.kt @@ -473,8 +473,8 @@ class PasswordCreationActivity : BasePGPActivity() { // username, if it is part of the file path if ( - autofilling && directoryStructure != DirectoryStructure.EncryptedUsername || - !editing && directoryStructure == DirectoryStructure.FileBased + (autofilling && directoryStructure != DirectoryStructure.EncryptedUsername) || + (!editing && directoryStructure == DirectoryStructure.FileBased) ) { if (editUsername.isBlank()) { username.requestFocus() diff --git a/app/src/main/java/app/passwordstore/ui/git/config/GitServerConfigActivity.kt b/app/src/main/java/app/passwordstore/ui/git/config/GitServerConfigActivity.kt index 02adf3a21..7f794d275 100644 --- a/app/src/main/java/app/passwordstore/ui/git/config/GitServerConfigActivity.kt +++ b/app/src/main/java/app/passwordstore/ui/git/config/GitServerConfigActivity.kt @@ -288,8 +288,6 @@ class GitServerConfigActivity : BaseGitActivity() { companion object { - private val PORT_REGEX = ":[0-9]{1,5}/".toRegex() - fun createCloneIntent(context: Context): Intent { return Intent(context, GitServerConfigActivity::class.java).apply { putExtra("cloning", true) diff --git a/app/src/main/java/app/passwordstore/ui/settings/RepositorySettings.kt b/app/src/main/java/app/passwordstore/ui/settings/RepositorySettings.kt index 15efca4e9..f21a4f339 100644 --- a/app/src/main/java/app/passwordstore/ui/settings/RepositorySettings.kt +++ b/app/src/main/java/app/passwordstore/ui/settings/RepositorySettings.kt @@ -163,7 +163,7 @@ class RepositorySettings(private val activity: FragmentActivity) : SettingsProvi val progressDialog = MaterialAlertDialogBuilder(activity) .setTitle(R.string.prefs_import_passwords_dialog_title) - .setMessage(R.string.prefs_export_passwords_dialog_message) + .setMessage(R.string.prefs_import_passwords_dialog_message) .setCancelable(false) .create() @@ -540,7 +540,7 @@ private fun renameFilesInDirectoryTree( override fun visitFile(file: Path, attrs: BasicFileAttributes): FileVisitResult { val fileName = file.fileName.toString() if (fileName.endsWith(oldExtension)) { - val newFileName = fileName.replace(oldExtension, newExtension) + val newFileName = fileName.removeSuffix(oldExtension) + newExtension val newFile = file.resolveSibling(newFileName) Files.move(file, newFile) } diff --git a/app/src/main/java/app/passwordstore/util/autofill/AutofillViewUtils.kt b/app/src/main/java/app/passwordstore/util/autofill/AutofillViewUtils.kt index 4c3e6b99f..fa2212ed2 100644 --- a/app/src/main/java/app/passwordstore/util/autofill/AutofillViewUtils.kt +++ b/app/src/main/java/app/passwordstore/util/autofill/AutofillViewUtils.kt @@ -76,8 +76,8 @@ fun makeInlinePresentation( ) val slice = InlineSuggestionUi.newContentBuilder(launchIntent).run { - setTitle(metadata.title?.let { it } ?: "") - setSubtitle(metadata.subtitle?.let { it } ?: "") + setTitle(metadata.title ?: "") + setSubtitle(metadata.subtitle ?: "") setContentDescription(listOfNotNull(metadata.title, metadata.subtitle).joinToString(" - ")) setStartIcon(Icon.createWithResource(context, metadata.iconRes)) build().slice diff --git a/app/src/main/java/app/passwordstore/util/settings/DirectoryStructure.kt b/app/src/main/java/app/passwordstore/util/settings/DirectoryStructure.kt index 8565c3ca8..39f08647d 100644 --- a/app/src/main/java/app/passwordstore/util/settings/DirectoryStructure.kt +++ b/app/src/main/java/app/passwordstore/util/settings/DirectoryStructure.kt @@ -97,7 +97,7 @@ enum class DirectoryStructure(val value: String) { when (this) { EncryptedUsername -> file.nameWithoutExtension FileBased -> file.parentFile?.name ?: file.nameWithoutExtension - DirectoryBased -> file.parentFile?.parent + DirectoryBased -> file.parentFile?.parentFile?.name } /** diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5d298e25f..31b146634 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -150,6 +150,7 @@ Import repository Imports a password repository from an external directory. Importing passwords + Please wait… Local repository not empty The local password repository must be deleted first. Source directory unusable