Confirm password move if it will replace an existing one (#757)

* Confirm password move if it will replace an existing one

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>

* CHANGELOG: update

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2020-05-01 16:32:58 +05:30 committed by GitHub
parent 9696af4024
commit ced8bcca01
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 28 deletions

View file

@ -3,6 +3,9 @@ All notable changes to this project will be documented in this file.
## [Unreleased]
### Added
- Allow user to abort password move when it is replacing an existing file
## [1.7.2] - 2020-04-29
### Added
@ -126,7 +129,8 @@ All notable changes to this project will be documented in this file.
- Fix elements overlapping.
[Unreleased]: https://github.com/android-password-store/Android-Password-Store/compare/v1.7.1...HEAD
[Unreleased]: https://github.com/android-password-store/Android-Password-Store/compare/v1.7.2...HEAD
[1.7.2]: https://github.com/android-password-store/Android-Password-Store/compare/v1.7.1..v1.7.2
[1.7.1]: https://github.com/android-password-store/Android-Password-Store/compare/v1.7.0..v1.7.1
[1.7.0]: https://github.com/android-password-store/Android-Password-Store/compare/v1.6.0..v1.7.0
[1.6.0]: https://github.com/android-password-store/Android-Password-Store/compare/v1.5.0..v1.6.0

View file

@ -729,37 +729,21 @@ class PasswordStore : AppCompatActivity() {
val sourceLongName = getLongName(requireNotNull(source.parent), repositoryPath, basename)
val destinationLongName = getLongName(target.absolutePath, repositoryPath, basename)
if (destinationFile.exists()) {
tag(TAG).e { "Trying to move a file that already exists." }
// TODO: Add option to cancel overwrite. Will be easier once this is an async task.
e { "Trying to move a file that already exists." }
MaterialAlertDialogBuilder(this)
.setTitle(resources.getString(R.string.password_exists_title))
.setMessage(resources
.getString(
R.string.password_exists_message,
destinationLongName,
sourceLongName))
.setPositiveButton("Okay", null)
.setMessage(resources.getString(
R.string.password_exists_message,
destinationLongName,
sourceLongName)
)
.setPositiveButton(R.string.dialog_ok) { _, _ ->
movePasswords(source, destinationFile, sourceLongName, destinationLongName)
}
.setNegativeButton(R.string.dialog_cancel, null)
.show()
}
val sourceDestinationMap = if (source.isDirectory) {
// Recursively list all files (not directories) below `source`, then
// obtain the corresponding target file by resolving the relative path
// starting at the destination folder.
val sourceFiles = FileUtils.listFiles(source, null, true)
sourceFiles.associateWith { destinationFile.resolve(it.relativeTo(source)) }
} else {
mapOf(source to destinationFile)
}
if (!source.renameTo(destinationFile)) {
// TODO this should show a warning to the user
tag(TAG).e { "Something went wrong while moving." }
} else {
AutofillMatcher.updateMatches(this, sourceDestinationMap)
commitChange(this.resources
.getString(
R.string.git_commit_move_text,
sourceLongName,
destinationLongName))
movePasswords(source, destinationFile, sourceLongName, destinationLongName)
}
}
resetPasswordList()
@ -772,6 +756,29 @@ class PasswordStore : AppCompatActivity() {
super.onActivityResult(requestCode, resultCode, data)
}
private fun movePasswords(source: File, destinationFile: File, sourceLongName: String, destinationLongName: String) {
val sourceDestinationMap = if (source.isDirectory) {
// Recursively list all files (not directories) below `source`, then
// obtain the corresponding target file by resolving the relative path
// starting at the destination folder.
val sourceFiles = FileUtils.listFiles(source, null, true)
sourceFiles.associateWith { destinationFile.resolve(it.relativeTo(source)) }
} else {
mapOf(source to destinationFile)
}
if (!source.renameTo(destinationFile)) {
// TODO this should show a warning to the user
e { "Something went wrong while moving." }
} else {
AutofillMatcher.updateMatches(this, sourceDestinationMap)
commitChange(this.resources
.getString(
R.string.git_commit_move_text,
sourceLongName,
destinationLongName))
}
}
private fun initRepository(operation: Int) {
closeRepository()
MaterialAlertDialogBuilder(this)