Merge tag '2.9.15' into develop

2.9.15
This commit is contained in:
J-Jamet
2021-03-29 22:01:52 +02:00
9 changed files with 61 additions and 35 deletions

View File

@@ -11,7 +11,7 @@ android {
applicationId "com.kunzisoft.keepass" applicationId "com.kunzisoft.keepass"
minSdkVersion 15 minSdkVersion 15
targetSdkVersion 30 targetSdkVersion 30
versionCode = 66 versionCode = 68
versionName = "2.9.15" versionName = "2.9.15"
multiDexEnabled true multiDexEnabled true

View File

@@ -162,27 +162,31 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
// Observe list of databases // Observe list of databases
databaseFilesViewModel.databaseFilesLoaded.observe(this) { databaseFiles -> databaseFilesViewModel.databaseFilesLoaded.observe(this) { databaseFiles ->
when (databaseFiles.databaseFileAction) { try {
DatabaseFilesViewModel.DatabaseFileAction.NONE -> { when (databaseFiles.databaseFileAction) {
mAdapterDatabaseHistory?.replaceAllDatabaseFileHistoryList(databaseFiles.databaseFileList) DatabaseFilesViewModel.DatabaseFileAction.NONE -> {
} mAdapterDatabaseHistory?.replaceAllDatabaseFileHistoryList(databaseFiles.databaseFileList)
DatabaseFilesViewModel.DatabaseFileAction.ADD -> {
databaseFiles.databaseFileToActivate?.let { databaseFileToAdd ->
mAdapterDatabaseHistory?.addDatabaseFileHistory(databaseFileToAdd)
} }
GroupActivity.launch(this@FileDatabaseSelectActivity, DatabaseFilesViewModel.DatabaseFileAction.ADD -> {
PreferencesUtil.enableReadOnlyDatabase(this@FileDatabaseSelectActivity)) databaseFiles.databaseFileToActivate?.let { databaseFileToAdd ->
} mAdapterDatabaseHistory?.addDatabaseFileHistory(databaseFileToAdd)
DatabaseFilesViewModel.DatabaseFileAction.UPDATE -> { }
databaseFiles.databaseFileToActivate?.let { databaseFileToUpdate -> GroupActivity.launch(this@FileDatabaseSelectActivity,
mAdapterDatabaseHistory?.updateDatabaseFileHistory(databaseFileToUpdate) PreferencesUtil.enableReadOnlyDatabase(this@FileDatabaseSelectActivity))
} }
} DatabaseFilesViewModel.DatabaseFileAction.UPDATE -> {
DatabaseFilesViewModel.DatabaseFileAction.DELETE -> { databaseFiles.databaseFileToActivate?.let { databaseFileToUpdate ->
databaseFiles.databaseFileToActivate?.let { databaseFileToDelete -> mAdapterDatabaseHistory?.updateDatabaseFileHistory(databaseFileToUpdate)
mAdapterDatabaseHistory?.deleteDatabaseFileHistory(databaseFileToDelete) }
}
DatabaseFilesViewModel.DatabaseFileAction.DELETE -> {
databaseFiles.databaseFileToActivate?.let { databaseFileToDelete ->
mAdapterDatabaseHistory?.deleteDatabaseFileHistory(databaseFileToDelete)
}
} }
} }
} catch (e: Exception) {
Log.e(TAG, "Unable to observe database action", e)
} }
databaseFilesViewModel.consumeAction() databaseFilesViewModel.consumeAction()
} }

View File

@@ -25,6 +25,7 @@ import android.content.Intent
import android.content.ServiceConnection import android.content.ServiceConnection
import android.net.Uri import android.net.Uri
import android.os.IBinder import android.os.IBinder
import android.util.Log
import com.kunzisoft.keepass.services.AdvancedUnlockNotificationService import com.kunzisoft.keepass.services.AdvancedUnlockNotificationService
import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.utils.SingletonHolderParameter import com.kunzisoft.keepass.utils.SingletonHolderParameter
@@ -76,7 +77,11 @@ class CipherDatabaseAction(context: Context) {
mServiceConnection!!, mServiceConnection!!,
Context.BIND_ABOVE_CLIENT) Context.BIND_ABOVE_CLIENT)
if (mBinder == null) { if (mBinder == null) {
applicationContext.startService(mIntentAdvancedUnlockService) try {
applicationContext.startService(mIntentAdvancedUnlockService)
} catch (e: Exception) {
Log.e(TAG, "Unable to start cipher action", e)
}
} }
} }
} }
@@ -173,5 +178,7 @@ class CipherDatabaseAction(context: Context) {
).execute() ).execute()
} }
companion object : SingletonHolderParameter<CipherDatabaseAction, Context>(::CipherDatabaseAction) companion object : SingletonHolderParameter<CipherDatabaseAction, Context>(::CipherDatabaseAction) {
private val TAG = CipherDatabaseAction::class.java.name
}
} }

View File

@@ -25,7 +25,10 @@ import android.content.Context.BIND_NOT_FOREGROUND
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.IBinder import android.os.IBinder
import android.util.Log
import android.widget.Toast
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.dialogs.DatabaseChangedDialogFragment import com.kunzisoft.keepass.activities.dialogs.DatabaseChangedDialogFragment
import com.kunzisoft.keepass.activities.dialogs.DatabaseChangedDialogFragment.Companion.DATABASE_CHANGED_DIALOG_TAG import com.kunzisoft.keepass.activities.dialogs.DatabaseChangedDialogFragment.Companion.DATABASE_CHANGED_DIALOG_TAG
import com.kunzisoft.keepass.app.database.CipherDatabaseEntity import com.kunzisoft.keepass.app.database.CipherDatabaseEntity
@@ -251,11 +254,16 @@ class ProgressDatabaseTaskProvider(private val activity: FragmentActivity) {
} }
private fun start(bundle: Bundle? = null, actionTask: String) { private fun start(bundle: Bundle? = null, actionTask: String) {
activity.stopService(intentDatabaseTask) try {
if (bundle != null) activity.stopService(intentDatabaseTask)
intentDatabaseTask.putExtras(bundle) if (bundle != null)
intentDatabaseTask.action = actionTask intentDatabaseTask.putExtras(bundle)
activity.startService(intentDatabaseTask) intentDatabaseTask.action = actionTask
activity.startService(intentDatabaseTask)
} catch (e: Exception) {
Log.e(TAG, "Unable to perform database action", e)
Toast.makeText(activity, R.string.error_start_database_action, Toast.LENGTH_LONG).show()
}
} }
/* /*
@@ -591,4 +599,8 @@ class ProgressDatabaseTaskProvider(private val activity: FragmentActivity) {
} }
, ACTION_DATABASE_SAVE) , ACTION_DATABASE_SAVE)
} }
companion object {
private val TAG = ProgressDatabaseTaskProvider::class.java.name
}
} }

View File

@@ -27,7 +27,7 @@ class BinaryCache {
} }
} }
// Similar to file storage but much faster // Similar to file storage but much faster TODO SparseArray
private val byteArrayList = HashMap<String, ByteArray>() private val byteArrayList = HashMap<String, ByteArray>()
fun getByteArray(key: String): KeyByteArray { fun getByteArray(key: String): KeyByteArray {

View File

@@ -20,6 +20,7 @@
package com.kunzisoft.keepass.database.element.icon package com.kunzisoft.keepass.database.element.icon
import android.os.Parcel import android.os.Parcel
import android.os.ParcelUuid
import android.os.Parcelable import android.os.Parcelable
import com.kunzisoft.keepass.database.element.database.DatabaseVersioned import com.kunzisoft.keepass.database.element.database.DatabaseVersioned
import java.util.* import java.util.*
@@ -37,17 +38,17 @@ class IconImageCustom : Parcelable, IconImageDraw {
} }
constructor(parcel: Parcel) { constructor(parcel: Parcel) {
uuid = parcel.readSerializable() as UUID uuid = parcel.readParcelable<ParcelUuid>(ParcelUuid::class.java.classLoader)?.uuid ?: DatabaseVersioned.UUID_ZERO
}
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeParcelable(ParcelUuid(uuid), flags)
} }
override fun describeContents(): Int { override fun describeContents(): Int {
return 0 return 0
} }
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeSerializable(uuid)
}
override fun hashCode(): Int { override fun hashCode(): Int {
val prime = 31 val prime = 31
var result = 1 var result = 1

View File

@@ -20,6 +20,7 @@
package com.kunzisoft.keepass.database.element.node package com.kunzisoft.keepass.database.element.node
import android.os.Parcel import android.os.Parcel
import android.os.ParcelUuid
import android.os.Parcelable import android.os.Parcelable
import java.util.* import java.util.*
@@ -35,12 +36,12 @@ class NodeIdUUID : NodeId<UUID> {
} }
constructor(parcel: Parcel) { constructor(parcel: Parcel) {
id = parcel.readSerializable() as UUID id = parcel.readParcelable<ParcelUuid>(ParcelUuid::class.java.classLoader)?.uuid ?: id
} }
override fun writeToParcel(dest: Parcel, flags: Int) { override fun writeToParcel(dest: Parcel, flags: Int) {
super.writeToParcel(dest, flags) super.writeToParcel(dest, flags)
dest.writeSerializable(id) dest.writeParcelable(ParcelUuid(id), flags)
} }
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {

View File

@@ -67,7 +67,7 @@ class ClipboardHelper(private val context: Context) {
fun getClipboard(context: Context): CharSequence { fun getClipboard(context: Context): CharSequence {
if (getClipboardManager()?.hasPrimaryClip() == true) { if (getClipboardManager()?.hasPrimaryClip() == true) {
val data = getClipboardManager()?.primaryClip val data = getClipboardManager()?.primaryClip
if (data!!.itemCount > 0) { if (data != null && data.itemCount > 0) {
val text = data.getItemAt(0).coerceToText(context) val text = data.getItemAt(0).coerceToText(context)
if (text != null) { if (text != null) {
return text return text

View File

@@ -142,6 +142,7 @@
<string name="error_upload_file">An error occurred while uploading the file data.</string> <string name="error_upload_file">An error occurred while uploading the file data.</string>
<string name="error_duplicate_file">The file data already exists.</string> <string name="error_duplicate_file">The file data already exists.</string>
<string name="error_remove_file">An error occurred while removing the file data.</string> <string name="error_remove_file">An error occurred while removing the file data.</string>
<string name="error_start_database_action">An error occurred while performing an action on the database.</string>
<string name="field_name">Field name</string> <string name="field_name">Field name</string>
<string name="field_value">Field value</string> <string name="field_value">Field value</string>
<string name="file_not_found_content">Could not find file. Try reopening it from your file browser.</string> <string name="file_not_found_content">Could not find file. Try reopening it from your file browser.</string>